0

在类似以下内容的文件中:

self.phrase
self.phrases
self.phrase.lower()
self.phrase_lowered
self.phrases[self.phrase]

我想用 替换所有self.phraseself._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

但它没有用。

4

3 回答 3

7

用于\>标记单词的结尾:

1,$s/self\.phrase\>/self._phrase/g
于 2012-12-12T02:39:27.433 回答
4

它通常用负前瞻来表示,而不是像这样的原子[^s]

%s/self\.phrases\@!/self._phrase/g

. \zs在/或后视的帮助下,\ze您可以缩小要键入的字符数:

%s/self\.\zs\zephrases\@!/_/g

%s/\v(self\.)@<=(phrases@!)@=/_/g

(尽管后者仅比原始字符少 1 个字符)。

于 2012-12-12T03:45:50.270 回答
1

要使您的反向引用正常工作,请使用捕获组:

:%s/self\.phrase\([^s]\)/self\._phrase\1/gc

但是,正如@gits 指出的那样,这并不能解决您的问题。我个人建议使用@perreal 的答案。它更灵活,因此更有可能在未来发挥作用。但是,如果您决心像上述那样做,那么以下内容将起作用:

%s/self\.phrase\([^s]\|\s*$\)/self\._phrase\1/gc
于 2012-12-12T02:38:09.890 回答