我想删除所有与此正则表达式匹配的方括号:\[.*\].*{
,但我只想删除方括号,不想删除后面的内容。也就是说,当方括号后面跟着一个左花括号时,我只想删除方括号及其中的内容。
如何在Vim的查找/替换中完成这个操作?
你可以使用\zs
和\ze
来设置匹配的开始和结束位置。
:%s/\zs\[.*\]\ze.*{//g
应该可以工作。
这里是告诉Vim,将\zs
和\ze
之间的内容替换为空字符串。
(请注意您需要在您的Vim二进制文件中编译+syntax选项)
欲了解更多信息,请参见:help /\zs
或:help pattern
编辑: 实际上,在这种情况下,\zs并不是必要的,但我为了教育目的而保留它。:)
如果你在正则表达式的最后一部分加上括号,你可以在替换中重复使用它:
:%s/\[.*\]\(.*{\)/\1/g
\1代表正则表达式中括号内的部分。
我喜欢在进行搜索和替换之前先构建我的搜索字符串,以确保在更改文档之前它是正确的:
/\[.*\]\(.*{\)
这将突出显示您将要替换的所有出现情况。
然后运行%s命令而不使用搜索词来使其重新使用上次的搜索词。
:%s//\1/g
$1
来替换术语,但显然应该使用\1
。 - icc97:%s#\[.*\]\ze.*{##g
\ze
项目标记了匹配的结尾,因此跟随其后的任何内容都不会被替换。这将在当前文件上运行您的正则表达式:
:%s/\[.*\]\(.*{\)/\1/g