22
string input = "Hello World!";
string pattern = "(World|Universe)";
string replacement = "$1";

string result = Regex.Replace(input, pattern, replacement);

次の例では、が最初のグループに置き換えられるため、結果は次のようになりますが"Hello World!"、必要な結果は次のようになります。$1(World|Universe)"Hello $1!"

このRegex.Escapeメソッドは、スラッシュや他の正規表現パターン文字などの他の文字をエスケープできるため、置換ではなく正規表現パターンをエスケープするために使用することを目的としています。私の問題の明らかな解決策は、私の置き換えをに等しくすること"$$1"であり、達成するでしょ"Hello $1!"うが、ドル記号が私が逃げなければならない唯一の値であるかどうか疑問に思いました(replacementユーザー生成であり、事前にそれを知らないと仮定します) 、またはこれをすでに実行するヘルパー関数はありますか。

使用する置換値をエスケープする関数を知っている人はいRegex.Replace(string input, string pattern, string replacement)ますか?

4

1 に答える 1

23

MSDNから:

置換パラメーターは、入力の各一致を置換する文字列を指定します。置換は、リテラルテキストと置換の任意の組み合わせで構成できます。

次の置換が定義されています。

  • $ number
  • ${名前}
  • $$
  • $&
  • $ `
  • $ '
  • $ +
  • $ _

置換は、置換パターンで認識される唯一の特別な構造です。文字エスケープや任意の文字に一致するピリオド(。)など、他の正規表現言語要素はサポートされていません。同様に、置換言語要素は置換パターンでのみ認識され、正規表現パターンでは無効になりません。

したがって、エスケープする必要があるのは$文字だけのように見えます。

于 2012-04-09T19:07:25.973 に答える