正则表达式和冒号(:)

我有以下代码。 这个想法是检测整个单词。

bool contains = Regex.IsMatch("Hello1 Hello2", @"\bHello\b"); // yields false bool contains = Regex.IsMatch("Hello Hello2", @"\bHello\b"); // yields true bool contains = Regex.IsMatch("Hello: Hello2", @"\bHello\b"); **// yields true, but should yield false** 

似乎正则表达式忽略了冒号。 如何修改代码,使最后一行返回false?

\b表示“单词边界”。 :不是任何单词的一部分,所以表达式是真的。

也许你想要一个像这样的表达式:

 (^|\s)Hello(\s|$) 

这意味着: 字符串“Hello”,前面是表达式的开头或空格,后跟表达式的结尾或空格。

正则表达式并没有忽视冒号。 冒号前面的位置是\b匹配的位置,因为\b匹配单词边界。 这意味着单词字符和非单词字符之间的位置。

如果你想在你的单词’Hello’之后跟随Whitespace,那么使用"\bHello\s"