2017-07-30 21 views
4

Vim、Notepad ++、またはSublimeを使用部分を検索して置き換えたい場合はがマッチします。私はこれが否定的な先読みを使って行うことができると思うが、私はコミュニティからの意見を求めたい。正規表現:正規表現マッチの一部を置換する

は、私は次の例では、「放射性降下物」と「脱落」の事件を交換したいと言う:

  • 彼らは核出秋と放射線を心配しています。
  • 落ちているし、放射線があります。
  • 長崎では最大の懸念事項の一つが脱落していました。
  • 2000年代のベストゲームの1つは「落ちる」ことでした。

カウンターの例:

  • あなたの範囲の外に下落するだろう。

私が一致するように、1つの明らかなパターンがあるとします

fall out[^a-z] 

しかし、この試合で、ここで「放射性降下物」と試合を交換して望ましくない影響を持つことになり、中にカンマ、スペース、ピリオド、および末尾の引用、すなわち4つの肯定的な例は消去されるだろう。

あなたはどのようにしてこれを処理し、ボーナスを得ることができますか?マッチで大文字と小文字をどのように保持しますか?

+1

np ++では、['\ bfall out \ b'](https://regex101.com/r/NlgKPG/1)を使用します。興味があれば、[SOのドキュメント*単語境界*](https://stackoverflow.com/documentation/regex/1539/word-boundary#t=201707302028316100317)を参照してください。 –

答えて

5

ネガティブな先読みで必要なことを行うことはおそらくできますが、私はあなたが必要と思わないので、ゼロ幅のアトム\>:h /\>を参照)を使用して単語の終わりを記述します。

\>は、前の文字が最後の単語(技術的には、バッファローカルオプション'iskeyword'の最後の文字)であることを意味します。ケースの問題については

、あなたがあなたの置換コマンドの交換部品でそれらを参照することができるように、falloutをキャプチャする(:h /\(を参照)のグループをキャプチャ使用することができます。

それは与えるだろう:

:%s/\v\c<(fall)\s+(out)>/\1\2/g 

は少し内訳:

   ┌──────── capture `fall` 
      │  ┌ capture `out` 
     ┌────┤ ┌───┤ 
%s/\v\c<(fall)\s+(out)>/\1\2/g 
         │ │ 
         │ └─ use the text from the 2nd capturing group (will preserve the case) 
         └─ use the text from the 1st capturing group (will preserve the case) 

\s+は空白文字(少なくとも1つ)のシーケンスを説明します。 \cは大文字と小文字を区別しないパターンにし、\vは非常に魔法のモードを有効にします。それがなければ、パターン内のいくつかの原子/量子をエスケープする必要があります。

編集:

実は、あなただけの空白の列を除去することにより、コマンドを簡素化できます。

内訳
:%s/\v\c<fall\zs\s+\zeout>//g 

%s/\v\c<fall\zs\s+\zeout>//g 
      │  │ 
      │  └─ sets the end of the match 
      └─ sets the start of the match 

この時間は、あなたが原子を使用\zs\zeでマッチの開始と終了を設定します。詳細については、:h /\zsおよび:h /\zeを参照してください。

+0

非常に有望で詳細な説明がありますが、これはVimにのみ適用されるものではありませんか? – JonasJSchreiber

+0

@JonasJSchreiberはい、申し訳ありません。私はあなたの質問がVimよりも一般的であったという事実を逃しました。残念ながら、私は他のエディタの正規表現エンジンがどのように動作するのか分からないので、私はそれらについての情報を追加するのには自信がありません。しかし、どのエディタを使用しても、検索する必要があるキーワードは「グループを捕捉する」、「単語境界」、「逆参照」です。これらの構文の表記法は、正規表現エンジンとは異なる場合がありますが、その目的は同じである必要があります。 – user852573

+0

@JonasJSchreiber例えば、崇高では、Vimのように括弧を使ってキャプチャグループを表現できると思います。おそらく '\ 1'と' \ 2'は置換部分の後方参照として使用できます。異なるものでなければならないのは単語の境界だけです。昇華した状態では '\ b'、Vimでは' \ <' and '\> 'です。しかし、重要なことは、イホは、構造自体ではなく、その意味です。構成は変更される可能性がありますが、通常は意味は変わりません。 – user852573