【问题标题】:regex - unrecognized escape sequence正则表达式 - 无法识别的转义序列
【发布时间】:2012-04-25 15:19:54
【问题描述】:

发件人: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 个构建错误。

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

这里有什么问题?

【问题讨论】:

标签: c# regex escaping


【解决方案1】:

尝试:

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

更多细节。

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

或者,您可以简单地在反斜杠上加倍。例如:

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

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

【讨论】:

【解决方案2】:

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

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

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

您也可以使用 @"" 文字:

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

具有相同的值。


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

【讨论】:

    【解决方案3】:

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

    Here is a good article on strings and escaping them from MSDN

    文章中的一个例子:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多