2012-04-08 3 views
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)
どのように私は試合で見つかった1 []に、テキスト内のすべての()文字を代用することはできませんが、 ?

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

[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. 

編集
試合で一つ以上の何文字のテキストではなく、これらを代替するための簡単な方法はありますか?

+0

に使用することができます。それはあなたが意味することですか? – kev

+0

あなたはうまくいった。はい、それは私が意味するものです。次回は、私がやったように速くする(一般的な)方法を見つけたいと思います。 – Reman

答えて

1

を必要とし、捕獲グループを無視する\%(を使用しています。 IGNOREは は、(例えば、\a*\sJohnson)を変更することであることを括弧内に一致しないパターンを指定

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

IGNOREパターンの試合を除いて、バッファ の至る所に置き換えての一般的な問題を解決するためには、コマンド、私はあなたの質問を編集した

:%s/\(IGNORE\)\zs\|s/\=submatch(1)!=''?'':'t'/g 
+0

ib、 '\ a * \ sJohnson'が私の検索であり、テキスト中のすべての文字を' \ a * \ sJohnson'のスペースに置き換えたい、あるいはテキスト中の 's'を' t'に変更したい's'のマッチでは、正規表現は何でしょうか? – Reman

+0

@Remonn:更新された答えを見てください。私が追加したコマンドが問題を解決すれば(私はそれが正しいと確信していません)、私はその説明を詳しく説明します。 –

+0

ib、ありがとう。私はあなたが成功せずにコードを試しました。記入p.e. 3行を文字 'a'で置き換え、' try'を行内に入れ(テキストを無視する)、 'r'を' b'で置き換えようとする。私はそれを働かせることはできません。たぶん私は間違ったことをしました。 – Reman

2

これが動作することができます:あなたは\@!Negative Lookahead)を使用することができます

:%s/(\(\a*\sJohnson\))/LEFTPARENT\1RIGHTPARENT/g 
:%s/(/[/g 
:%s/)/]/g 
:%s/LEFTPARENT/(/g 
:%s/RIGHTPARENT/)/g 
3

:%s/(\%(\a*\sJohnson\)\@!\([^)]*\))/[\1]/g 
    ->|............|<--- 
  • \%(...\)\@!Negative Lookaheadです。
  • \([^)]*\)は、)以外のすべてと一致します。
  • 私は、そうでなければ、一つは 問題の目的を達成するために次の置換コマンドを使用することができます/[\2]/
+0

これは、私がやったようにはるかに簡単ですが、どのようにp.e.テキスト内のすべての "s"を除外しますが、マッチで見つかったものは除きませんか? – Reman

関連する問題