2010-11-09 64 views
6

我有以下代码。这个想法是检测整个单词。正则表达式和冒号(:)

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

你试过逃脱冒号吗? '你好\:' – 2010-11-09 14:20:41

+3

@Evan:':'不是regexen的元字符。 – sepp2k 2010-11-09 14:21:16

+2

没有必要逃脱':' – 2010-11-09 14:22:01

回答

11

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

也许你想这样的表达式:

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

这意味着:字符串“Hello”,表达式或空白,任开始之前和之后的表达的任何一个结束或空白。

2

正则表达式不会忽略冒号。冒号前的位置是\b匹配的位置,因为\b匹配字边界。这意味着在一个单词字符和一个非单词字符之间的位置。

如果您希望Whitespace在您的单词“Hello”之后跟随,请使用"\bHello\s"

相关问题