C# 为什么\b与使用.net正则表达式的word不匹配

C# 为什么\b与使用.net正则表达式的word不匹配,c#,.net,regex,C#,.net,Regex,复习我读过的常规表达。无论如何,该教程提到\b匹配单词边界(在\w和\w字符之间)。该教程还提供了一个链接,您可以在其中安装expresso(创建正则表达式时提供帮助的程序) 所以我用expresso创建了我的正则表达式,我确实得到了一个匹配。现在,当我将同一个正则表达式复制到VisualStudio时,我没有得到匹配项。看一看: 为什么我找不到火柴?在即时窗口中,我显示变量输出的内容。在expresso中,我确实得到了匹配,而在VisualStudio中,我没有。为什么?C语言和.NE

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

所以我用expresso创建了我的正则表达式,我确实得到了一个匹配。现在,当我将同一个正则表达式复制到VisualStudio时,我没有得到匹配项。看一看:



为什么我找不到火柴?在即时窗口中,我显示变量输出的内容。在expresso中,我确实得到了匹配,而在VisualStudio中,我没有。为什么?

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

@"\bCOMPILATION UNIT";

我要说的是.NETRegex文档并没有明确说明这一点。一开始我也花了一段时间才弄明白


有趣的事实:正则表达式和C语言都能识别
\r
\n
字符(分别为回车符和换行符)以及其他一些字符,因此最终结果是相同的,即使编译的字符串不同。

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

你是否必须双转义
\b
输出是否是图片中显示的给定单词?我无法查看图像,可能是因为防火墙在工作,但是,为了确定,您是否需要避开反斜杠,即写入
\\b
?或者,如注释所示,双反斜杠:
“\\b编译单元”
(+1)哇,这让我很难过。谢谢
"\\bCOMPILATION UNIT"