【问题标题】:C# Regex, Unrecognized escape sequenceC# 正则表达式,无法识别的转义序列
【发布时间】:2011-11-08 22:22:05
【问题描述】:

我有以下格式的字符串

    _AUTO_(123,SomeString)

我正在尝试使用正则表达式从上述字符串中提取 123。我正在使用的正则表达式是:

    const string pattern = @"\_AUTO\_\(?<number>(\d)+\,";
    foreach(Match match in Regex.Matches(line, pattern)) { 
       Console.WriteLine(match.Groups["number"].Value); 
    } 

我收到无法识别的转义序列 \_ 错误异常。 有人可以指出我做错了什么吗?

谢谢!

【问题讨论】:

  • 异常难道不是不言自明吗? _ 不是转义序列,不要转义!
  • 常识告诉你世界是平的?
  • 这对我来说并不明显,即使有异常消息。我仍然不确定文档herehere 是如何告诉我不允许使用“_”的。它在 Javascript 正则表达式中是允许的。即使是接受的答案也说“您不需要转义下划线”。不应该说“您不得转义下划线”吗?
  • 即使是 Microsoft 文档也说,当反斜杠“后跟一个未被识别为转义字符的字符时,匹配该字符。”。这不正是 OP 想要做的吗?匹配“_”?

标签: c# regex


【解决方案1】:

您不需要转义下划线(或者,就此而言,逗号)。将您的正则表达式更改为:

@"_AUTO_\(?<number>(\d)+,"

【讨论】:

  • 感谢丹的回复。异常消失了,但现在它没有打印匹配项。 :-(
  • 我认为你和我也做错了命名捕获。试试这个:@"_AUTO_\((?&lt;number&gt;(\d)+),"
  • 为什么你们都保留了(\d)?为什么不将表达式稍微简化为@"_AUTO_\((?&lt;number&gt;\d+),"
  • 让我吻你:* .. 我一直在尝试查看我的转义是否有效并且是否正常工作。一切都很好,但仍然是Unrecognized escape sequence 异常。正如你所提到的,我跳过了转义 _,,它起作用了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多