2016-04-22 11 views
1

私のコードでは、私が_SendPropertyChanged(nameof(FancyFuuBar));と置き換えたい_SendPropertyChanged("FancyFuuBar");を使用している場所がたくさんあります - 明らかにFancyFuuBar部分あらゆるところで同じではありませんが、私はどこでもこれに取り組むことができる単一のコマンドを望みます。コード内に文字列リテラルの代わりにC#6のnameof(x)を導入するための速いregexp

私はこれが正規表現で可能であることを知っています(実際には私は思っていると思いますが、私は知らない)。

正規表現にFancyFuuBarという名前を「記憶」して置き換えインスタンスで再度使用するにはどうすればよいですか?これはVisual Studio 2015の検索と置換で可能ですか?

これは単一の正規表現では不可能な場合は、制御を失うことなく、それを実行する最善の方法は何ですか?私。私は最初にいくつかのファイルにこれを制限することができ、できれば "次を検索"し、そのインスタンスを置換するかどうかを決定することができるようにしたいと思います。

私はまだすべてのコードでこれをビックバッグしていません。

+0

それは私が理解するのに十分なほど馬鹿ではありません。私のコード内のすべてのものにマッチしませんか?どのようにすべてのものを置き換えることはありませんか?ワット。 – gakera

+0

緑色の部分が一致した部分です。これは '$ 1'によって取り込まれ、アクセスされます。置き換えたいのは – rock321987

+0

' '_DoSomethingElse(" FancyFuuBar ");' 'などです。 – gakera

答えて

2

backreferencesは、対応するcapturing groupsでキャプチャした値を保持しています。

\b_SendPropertyChanged\("(.*?)"\); 

そして、ここで_SendPropertyChanged(nameof($1));

enter image description here

          V 

enter image description here

と交換してください:あなたは怠惰なマッチングを持つ任意の複雑なケースを持っていない場合

それは簡単です。 maの構造現在の式:

\b_SendPropertyChanged\("(.*?)"\); 
|      ^$1-^ | 
^--------------- Match Value ----^ 

と一致するものは、置換パターンに置き換えられます。キャプチャは0インデックスから始まり、0番目のグループは完全一致です。 $1は、最初に(...)でキャプチャされた値です。等々。

+0

働くスウェット、ありがとう! – gakera

+0

regular-expressions.infoへのリンクを追加して、グループのキャプチャ、そのキャプチャ、および後方参照の詳細を読んでみました。 –

+0

私が実際に理解していないのは、 '' _SendPropertyChanged( "' '$ 1の一部ではないので、それは一致しているのですが、私はうそをつくことはありません。私はあなたが使用したいと思うたびにあなたのお父さんに電話しなければならない奇妙なパワーツールのようなものです。私はそれらを適切に使うことを学ぶことができると確信していますが、それは価値があるためにはあまりにも危険です。 – gakera

関連する問題