【问题标题】:Why \b does not match word using .net regex为什么 \b 不匹配使用 .net 正则表达式的单词
【发布时间】:2012-06-19 15:22:15
【问题描述】:

要查看常规表达式,我阅读了this tutorial。无论如何,该教程提到 \b 匹配单词边界(在 \w 和 \W 字符之间)。该教程还提供了一个链接,您可以在其中安装 expresso(有助于创建正则表达式的程序)。

所以我在 expresso 中创建了我的正则表达式,并且确实得到了匹配。现在,当我将相同的正则表达式复制到 Visual Studio 时,我没有得到匹配。看看:



为什么我没有得到匹配?在即时窗口中,我正在显示变量输出的内容。在 expresso 中我确实得到了匹配,而在视觉工作室中我没有。为什么?

【问题讨论】:

  • 你必须双重转义\b吗?
  • output图中给定的单词吗?
  • 我无法查看图像可能是因为防火墙在工作,但为了确保您需要转义反斜杠,即写\\b

标签: c# .net regex


【解决方案1】:

C# 语言.NET 正则表达式 都有自己独特的反斜杠转义序列集,但 C# 编译器会拦截字符串中的 "\b"并将其转换为 ASCII 退格字符,以便 RegEx 类永远不会看到它。您需要逐字制作字符串(带有 at 符号的前缀)或双重转义“b”,以便将反斜杠传递给 RegEx,如下所示:

@"\bCOMPILATION UNIT";

或者

"\\bCOMPILATION UNIT"

我会说.NET RegEx 文档并没有说明这一点。起初我也花了一些时间才弄清楚这一点。

有趣的事实:\r\n 字符(分别为回车和换行符)和其他一些字符被 RegEx 和 C# 语言识别,所以结尾-结果是一样的,即使编译出来的字符串不同。

【讨论】:

  • 或者,如评论,双反斜杠:"\\bCOMPILATION UNIT" (+1)
  • 哇,这让我很难受。谢谢!
【解决方案2】:

您应该使用@"\bCOMPILATION UNIT"。这是逐字逐句。当您改为使用"\b" 时,它会将\b 解析为一个特殊字符。你也可以使用"\\b",它的双反斜杠被解析成一个真正的反斜杠,但在处理正则表达式时,通常使用逐字逐句更容易。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 2011-09-20
    • 2014-02-07
    • 2015-12-13
    • 1970-01-01
    相关资源
    最近更新 更多