正则表达式 - 无法识别的转义序列

b0x*_*0rz 0 c# regex escaping

来自: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]);
Run Code Online (Sandbox Code Playgroud)

我在on \{(.+?)\},on {}exact 上得到2个构建错误.

错误>无法识别的转义序列

这有什么不对?

Not*_*tMe 6

尝试:

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

更多细节.

@符号定义了一个逐字字符串文字.这基本上说告诉编译器引号中的字符串没有被转义. http://msdn.microsoft.com/en-us/library/aa691090(v=vs.71).aspx

或者,您可以简单地将反斜杠加倍.例如:

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

但是,恕我直言,@符号更具可读性.


zzz*_*Bov 5

您需要双重转义\字符,以便它们是\字符串中的文字,而不是用作字符串级转义序列.

"\\{(.+?)\\}"
Run Code Online (Sandbox Code Playgroud)

在字符串中,其值为 \{(.+?)\}

或者你可以使用@""文字:

@"\{(.+?)\}"
Run Code Online (Sandbox Code Playgroud)

它具有相同的值.


当您需要向字符串添加换行符时,可以使用转义序列"\n".字符串文字使用\转义字符来帮助编码标准键盘上不存在的字符,或者难以放在字符串中.正则表达式需要使用相同的\字符来转义模式中的特殊字符.这意味着\必须转义该字符以用作字符串中的文字值,即\\.