要查看正常的展示,请阅读this tutorial。无论如何,该教程提到\b
匹配单词边界(\ w和\ W字符之间)。该教程还提供了一个链接,您可以在其中安装expresso(在创建正则表达式时有帮助的程序)。
所以我在expresso中创建了我的正则表达式,并且我做了一个匹配。现在,当我将相同的正则表达式复制到visual studio时,我没有得到匹配。看看:
为什么我没有比赛?在即时窗口中,我显示了变量输出的内容。在expresso我得到一个匹配,在视觉工作室,我没有。为什么呢?
答案 0 :(得分:25)
C#语言和 .NET正则表达式都有自己独特的反斜杠转义序列集,但C#编译器正在拦截"\b"
你的字符串并将其转换为ASCII退格字符,以便RegEx
类永远不会看到它。你需要逐字地创建字符串(带有at符号的前缀)或双重转义'b',以便反斜杠传递给RegEx,如下所示:
@"\bCOMPILATION UNIT";
或者
"\\bCOMPILATION UNIT"
我会说.NET RegEx文档没有说明这一点。我花了一段时间才弄明白这一点。
Fun-fact:\r
和\n
字符(分别为回车和换行符)和其他一些字符被 RegEx和C#语言识别,所以即使编译后的字符串不同,最终结果也是一样的。
答案 1 :(得分:3)
您应该使用@"\bCOMPILATION UNIT"
。这是一个逐字的字面意思。当您执行"\b"
时,它会将\b
解析为特殊字符。你也可以做"\\b"
,它的双反斜杠被解析为一个真正的反斜杠,但在处理正则表达式时通常更容易使用verbatims。