0

次のようなファイルで:

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

取得することを除いて、すべてself.phraseをに置き換えたい:self._phraseself.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 に答える