我有以下代码。这个想法是检测整个单词。
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?
答案 0 :(得分:12)
\b
表示“单词边界”。 :
不是任何单词的一部分,所以表达式是真的。
也许你想要一个这样的表达式:
(^|\s)Hello(\s|$)
这意味着:字符串“Hello”,前面是表达式的开头或空格,后跟表达式的结尾或空格。
答案 1 :(得分:3)
正则表达式并没有忽略冒号。冒号前面的位置是\b
匹配的位置,因为\b
匹配单词边界。这意味着单词字符和非单词字符之间的位置。
如果你想在你的单词“Hello”之后跟随空白,那么请使用"\bHello\s"
。