2

昨日( )、テキスト内のすべてを置換しようとしましたが、以前の検索で見つかったものではありませんでした。良い解決策が見つかりませんでした。一つ一つ変えて作りました。

これは私の元のテキストです

(Peter Jackson) is the man who..... (John Johnson) is the man who....  
and (John Johnson) is also the man who.. not as (Jon Johnson)
more (letters) etc.

私の検索パターン:テキスト内のすべての文字 を に置き換えるにはどうすればよいですか? /(\a*\sJohnson)
( )[ ]

結果は次のようになります。

[Peter Jackson] is the man who..... (John Johnson) is the man who....  
and (John Johnson) is also the man who.. not as (Jon Johnson)
more [letters] etc.

編集
テキスト内の 1 つまたは複数の文字を置換する簡単な方法はありますか?

4

3 に答える 3

3

\@!否定先読み)を使用できます:

:%s/(\%(\a*\sJohnson\)\@!\([^)]*\))/[\1]/g
     ->|............|<---
  • \%(...\)\@!ですNegative Lookahead
  • \([^)]*\)を除くすべてに一致します)
  • キャプチャされたグループを無視するために使用\%(します。それ以外の場合は必要です/[\2]/
于 2012-04-08T07:48:35.793 に答える
2

これは機能します:

:%s/(\(\a*\sJohnson\))/LEFTPARENT\1RIGHTPARENT/g
:%s/(/[/g
:%s/)/]/g
:%s/LEFTPARENT/(/g
:%s/RIGHTPARENT/)/g
于 2012-04-08T07:22:10.450 に答える
1

問題の目的を達成するために、次の置換コマンドを使用できます。

:%s/(\(.\{-}\%(IGNORE.\{-}\)\@<!\))/[\1]/g

whereIGNOREは、変更する括弧内で一致しないパターンを指定します (\a*\sJohnsonたとえば、 )。

IGNOREパターンの一致以外のバッファ内のすべての場所を置換するという一般的な問題を解決するには、次のコマンドを使用できます。

:%s/\(IGNORE\)\zs\|s/\=submatch(1)!=''?'':'t'/g
于 2012-04-08T13:01:04.217 に答える