python - Vim 搜索 : avoid matches within comments

标签 python regex vim

使用 vim 搜索功能,是否可以避免在注释 block /行上进行匹配。

例如,我想在此 python 代码中匹配“图像”,但仅在代码中,而不是在注释中:

# Export the image
if export_images and i + j % 1000 == 0:
export_image(img_mask, "images/image{}.png".format(image_id))
image_id += 1

使用正则表达式我会做这样的事情:/^[^#].*(image).*/gm 但在 vim 中似乎不起作用。

最佳答案

你可以使用

/^[^#].*\zsimage\ze

\zs and \ze 分别表示比赛的开始和结束。

  • setting the start and end of the match: \zs \ze

请注意,这不会匹配一行中的多个“图像”,只会匹配最后一个。

此外,也许“否定前瞻”会比开头的否定字符类更好:

/^#\@!.*\zsimage\ze
  ^^^^

#\@!等于(?!#)在 Python 中。

而且因为在 Vim 中后视是非固定宽度的 ( like (?<=pattern) in Perl, but Vim allows non-fixed-width patterns ),你可以匹配字符序列 image 的所有匹配项

/\(^#\@!.*\)\@<=image

最后跳过缩进注释行上的匹配图像,您只需要匹配可选(零个或多个)空白符号( s) 在行首:

\(^\(\s*#\)\@!.*\)\@<=image
   ^^^^^^^^^^^   

\(\s*#\)\@!相当于 Python (?!\s*#) (如果后面没有后跟零个或多个空格后跟 # 则匹配)。

关于python - Vim 搜索 : avoid matches within comments,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35323148/

相关文章:

java - 正则表达式从java中的字符串中删除一些数据?

vim - 如何在vim中每隔几行添加一行

Vim如何移动csv列

python - '%.*g' % (6,k) 在 python 中如何工作

mysql - 在 MySQL 中有条件地使用 REGEXP

python - python 终端中 perl 的导入错误

regex - 在 perl 中使用 foreach 代替 map 和 grep

vim - 添加行的快捷方式

来自 C++ 应用程序的 Python C API - 知道何时锁定

python - 如何使用正确的数据库引用设置 Flask-Migrate?