来自: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个构建错误.
错误>无法识别的转义序列
这有什么不对?
尝试:
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)
但是,恕我直言,@符号更具可读性.
您需要双重转义\字符,以便它们是\字符串中的文字,而不是用作字符串级转义序列.
"\\{(.+?)\\}"
Run Code Online (Sandbox Code Playgroud)
在字符串中,其值为 \{(.+?)\}
或者你可以使用@""文字:
@"\{(.+?)\}"
Run Code Online (Sandbox Code Playgroud)
它具有相同的值.
当您需要向字符串添加换行符时,可以使用转义序列"\n".字符串文字使用\转义字符来帮助编码标准键盘上不存在的字符,或者难以放在字符串中.正则表达式需要使用相同的\字符来转义模式中的特殊字符.这意味着\必须转义该字符以用作字符串中的文字值,即\\.