Visual Studio 2012、2013、2015、およびVSコードで正規表現の検索と置換を使用してキャプチャグループをどのように参照しますか


255

私はこれについてたくさんの質問があることに気づきましたが、彼らが参照したVSバージョンを具体的に参照したものは見つかりませんでした。その重要な情報が不足していても、私が見つけた答えをうまく使うことができませんでした。最も一般的なのは

  • {}で囲み、\ 1、\ 2、\ nでディスプレイキャプチャ

ただし、これはVisual Studioで正規表現の検索と置換を行う古い方法のようで、VS 2012では機能しません。


1
これはヘルプで見つけるのはそれほど難しくありません。検索/置換ダイアログ、F1。テキストの検索と置換の早い段階で、VSでの正規表現の使用へのリンクがあります。2番目のヒントでは、正規表現の置換について説明します。そこには基本が示さ、「番号付きグループの置換」および「名前付きグループの置換」で詳細が説明されています。
PJTraill 2015

2
@PJTraill 2013年から2015年の間に2012年バージョンの質問に簡単に回答できるようになったことを知ってうれしいです。しかし、投票によって、ヘルプで見つけるのがまだ「それほど難しくない」ことはないことは明らかです。IMO:ヘルプをまったく検索せずに検索、置換、キャプチャを使用するよりも、スタックオーバーフローの記事を検索して投票する方が簡単な場合は、本来よりもはるかに困難です。
SgtPooki 2016年

MSVS 2012/3について私を悩ませている1つのことは、2つの異なる[検索/置換]ダイアログ、特に小さい(Ctrl-H)ダイアログで、誤って(キーストロークでおそらく他のどこかを意味する)検索範囲を変更してしまうことです。 。しかし、私が強調したいのは、大きな(Ctrl-Shift-H)ダイアログの「検索」フィールドと「置換」フィールドの後にボタンがあり、探しているものを含む、より重要な可能性のリストが表示されるということです。助けが必要!多くの人がボタンを見つけられなかったり、Ctrl-Hダイアログに到達してそれらを見ることができないと思います。
PJTraill 2016年

私はその助けを見つけるのが少し面倒だということに同意します。平文検索を優先しているのではないか。私のポイントは1つが知っているかと仮定した場合、それは1が存在しなければならないということよりであることができ、合理的に簡単にそれを見つけます。私はそれを見つけたら正規のドキュメントを使用することを好むので、ほとんどの場合、私はそのルートに従います。中傷するつもりはありませんでした。私はそれが「難しすぎる」と「難しすぎない」の両方であると考えています。「あまり強くない」が資格のある「難しい」と見なし、暗黙の「何のために難しいか」に対する答えを追加した場合、それらは反対ではありません。
PJTraill 2016年

REGEXPタグ付けが '()'を使用していることを「知っていた」ので、ドキュメントを再度読んで、それが機能しなかった...確認するためにここに来た...その後、さらに実験を行って、機能した。したがって、古いVS6の「タグ」の命名法を学ぶ必要があった私たちにとって、MSDNドキュメントは、()が式に「タグを付ける」ために使用されることを非常に明確にする必要があります。彼らが同じ命名法を使用できればいいのですが。番号付きグループ...シナプスを十分に刺激しないだけで、私見はできません。
ロスヤングブラッド

回答:


356

VS 2012およびVS 2015で検索して置き換えるには、次の操作を行います。

(syonipに感謝)

検索オプションで、「正規表現を使用する」がチェックされていることを確認し、検索するテキストとして次を入力します。

_platformActions.InstallApp\((.+)\)

そして、それを置き換えるテキストとして次のようにします:

this.Platform().App($1).Install()

注: SLaksが以下のコメントで指摘しているように、正規表現構文の変更は、VS2012が標準の.Net正規表現エンジンに切り替えたことによるものです。

注:別のコメンターは、これがVisual Studio Code(vscode)でも機能することを指摘しました


10
より一般的に言えば、VS2012は現在、標準の.Net正規表現エンジンを使用しています。
SLaks 2013年

4
_platformActionsとの間のピリオドをエスケープする必要はありませんInstallAppか?
rory.ap

それを今考えると、理にかなっています。私はそれをテストしていません。そこに自由に編集を入れてください。
SgtPooki 2016年

1
数値は少なくとも私にはうまくいかないように見えるので、結局私は名前を使っていました。(?<rval>.+)検索および置換${rval}
Mark Schultheiss

2
追加のヘルプ:Thing(。*)をThing $ 18に置き換える場合(キャプチャの直後に「8」を追加)、
Luc Bloom

17

これの例を追加するために、これが私のコードでしなければならなかったものです:

何を見つける:

_platformActions.InstallApp\((.+)\)

と置換する:

this.Platform().App($1).Install()

これにより、InstallApp(x)の呼び出しがthis.Platform()。App(x).Install()に置き換えられます。

*検索オプションで「正規表現を使用する」をマークすることを忘れないでください


10

グループ名を使用して作業する場合(上記と同じサンプルを使用):

何を見つける:

_platformActions\.InstallApp\((?<mygroupname>.+)\)

と置換する:

this.Platform().App(${mygroupname}).Install()

9

上記の答えを改善するには:

_platformActions.InstallApp\((.+)\)

this.Platform().App(${1}).Install()

キャプチャの後ろに数字を追加したい場合は、$ {1}を気にしてください。追加され$18た最初のキャプチャではなく、18番目の検索キャプチャを挿入しようとし8ます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.