说我想替换:
"Christoph Waltz" = "That's a Bingo";
"Gary Coleman" = "What are you talking about, dear Willis?";
只有:
"Christoph Waltz"
"Gary Coleman"
即。我想删除=
和;
我认为找到模式的正则表达式是\=.*?\;
。在vim中,我尝试过:
:%s/\=.*?\;$//g
但它给了我一个Invalid Command
错误和Nothing after \=
。如何删除上述文字?道歉,但我对此不熟悉。
答案 0 :(得分:1)
Vim的正则表达方言不同;它的转义是针对文本搜索进行优化的。有关与Perl正则表达式的比较,请参阅:help perl-patterns
。正如@EvergreenTree所指出的那样,你可以用特殊原子来影响逃逸行为; CP。 :help /\v
。
对于您的示例,非贪婪匹配为.\{-}
,而不是.*?
,并且如上所述,您不得转义多个文字字符:
:%s/ =.\{-};$//
(/g
标志也是多余的;只有一个匹配通过$
锚定到结尾。)
答案 1 :(得分:0)
这是因为默认情况下vim对正则表达式的奇怪处理。它将\=
解释为文字=
,而不是将其解释为特殊的正则表达式字符。要使vim的正则表达式系统正常工作,可以在其前面添加\v
,这是“非常神奇”的模式。这应该可以解决问题:
%s/\v\=.*\;$//g
我不会解释vim如何在这里以非常神奇的模式输入每一个角色,但你可以在这个帮助主题中阅读它:
:help /magic