在包含以下内容的文件中:
self.phrase
self.phrases
self.phrase.lower()
self.phrase_lowered
self.phrases[self.phrase]
我想将所有self.phrase
替换为self._phrase
,self.phrases
除外:
self._phrase
self.phrases
self._phrase.lower()
self._phrase_lowered
self.phrases[self._phrase]
在我试过的正则表达式中,第一个(我认为可行的正则表达式)是:
:%s/self\.phrase[^s]/self\._phrase\1/gc
但它不起作用。
答案 0 :(得分:7)
使用\>
标记单词的结尾:
1,$s/self\.phrase\>/self._phrase/g
答案 1 :(得分:4)
通常用负向前瞻表示而不是像[^s]
那样的原子:
%s/self\.phrases\@!/self._phrase/g
。在\zs
/ \ze
或后台搜索的帮助下,您可以缩小要输入的字符范围:
%s/self\.\zs\zephrases\@!/_/g
%s/\v(self\.)@<=(phrases@!)@=/_/g
(虽然后者只比原版少1个字符。)
答案 2 :(得分:1)
要让您的反向引用工作,请使用捕获组:
:%s/self\.phrase\([^s]\)/self\._phrase\1/gc
然而,正如@gits指出的那样,这并不能解决您的问题。我个人会建议使用@perreal的答案。它更灵活,因此更有可能在未来工作。但如果您决定采用上述方法,那么以下内容将起作用:
%s/self\.phrase\([^s]\|\s*$\)/self\._phrase\1/gc