繁体   English   中英

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

[英]regex - unrecognized escape sequence

来自: 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]);

我在{}上的\\{(.+?)\\}上遇到2个构建错误。

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

怎么了

尝试:

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

一些细节。

@符号定义了Verbatim字符串文字。 这基本上说了是告诉编译器引号中的字符串不会转义。 http://msdn.microsoft.com/zh-CN/library/aa691090(v=vs.71).aspx

您也可以选择在反斜杠上加倍。 例如:

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

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

您需要对\\字符进行两次转义,以使它们成为字符串中的\\文字,而不用作字符串级转义序列。

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

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

或者,您可以使用@""文字:

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

具有相同的值。


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

您可以添加一个@来转义整个字符串,也可以添加一个双斜杠\\\\来避免每次出现。

这是一篇关于字符串并从MSDN转义的好文章

文章中的一个示例:

@"c:\Docs\Source\a.txt"  // rather than "c:\\Docs\\Source\\a.txt"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM