0

差出人:https ://stackoverflow.com/a/959982/101055

私は使用しようとしています:

using System.Text.RegularExpressions;

Dictionary<string, string> parameters = new Dictionary<string, string>();
parameters.Add("goodName1", "asdf");
parameters.Add("goodName2", "qwerty");
string text = "this is my {goodName1} template {goodName2} string";
text = Regex.Replace(text, "\{(.+?)\}", m => parameters[m.Groups[1].Value]);

\{(.+?)\}、on {、および}正確に2つのビルドエラーが発生します。

エラー>認識されないエスケープシーケンス

ここで何が問題になっていますか?

4

3 に答える 3

6

試す:

text = Regex.Replace(text, @"\{(.+?)\}", m => parameters[m.Groups[1].Value]);

さらにいくつかの詳細。

@記号は、逐語的な文字列リテラルを定義します。これは基本的に、引用符で囲まれた文字列がエスケープされていないことをコンパイラに通知することを意味します。 http://msdn.microsoft.com/en-us/library/aa691090(v=vs.71).aspx

オプションで、バックスラッシュを単純に2倍にすることもできます。例えば:

text = Regex.Replace(text, "\\{(.+?)\\}", m => parameters[m.Groups[1].Value]);

しかし、私見では、@記号の方がはるかに読みやすくなっています。

于 2012-04-25T15:21:05.283 に答える
5

文字列内のリテラルであり、文字列レベルのエスケープシーケンスとして使用されないように、文字\をダブルエスケープする必要があります。\

"\\{(.+?)\\}"

文字列内では、これは次の値を持ちます\{(.+?)\}

@""または、次の文字を使用することもできます。

@"\{(.+?)\}"

これは同じ値です。


文字列に改行を追加する必要がある場合は、エスケープシーケンスを使用します"\n"。文字列リテラルは\、エスケープ文字としてを使用して、標準のキーボードには存在しない文字、または文字列内に配置するのが難しい文字のコーディングを支援します。正規表現\では、パターン内の特殊文字をエスケープするために同じ文字を使用する必要があります。これは\、文字列のリテラル値として使用するには、文字をエスケープする必要があることを意味し\\ます。

于 2012-04-25T15:21:09.563 に答える
1

文字列全体をエスケープするためにを追加するか、各オカレンスをエスケープするため@にダブルスラッシュを置くことができます。\\

文字列とMSDNからのエスケープに関する優れた記事があります

記事の例:

@"c:\Docs\Source\a.txt"  // rather than "c:\\Docs\\Source\\a.txt"
于 2012-04-25T15:21:53.463 に答える