我使用一个简单的正则表达式(在C#中)来查找文本块中的整个单词。
该单词可能出现在文本中的文本或句子的开头,结尾或中间。
我一直在使用\bword\b
的表达式已经正常工作,但是如果单词包含一个特殊字符(已被转义),则它不再有效。边界是必不可少的,因此我们不会选择像vb.net这样的单词来匹配.net。
两个失败的例子是:
\bc\#\b
\b\.net\b
我可以将单词边界更改为其他检查列表,例如不在起始非空格等处。但是这很复杂,如果在大量单词上使用,可能会很慢。
答案 0 :(得分:3)
\b
匹配单词字符和非单词字符之间的边界,但不匹配两个非单词字符之间的边界。
例如,在C#
的情况下,C
(一个单词字符)和#
(一个非单词字符)之间存在边界,但#
之间没有(?:^|\W)
。 1}}以及其后的任何内容(空格,标点符号,字符串结尾等)。
您可以按如下方式解决此问题:
\b
代替(?:^|\W)\.NET\b
例如,.
(?:\W|$)
字符前的非单词字符。\b
代替\bC#(?:\W|$)
例如,#
答案 1 :(得分:3)
我建议使用负面看法:
(?<!\w)c#(?!\w)
(?<!\w)\.net(?!\w)
这应该比匹配锚点或非单词字符(如(?:^|\W)
)更快,而且当匹配的\W
时,您不必处理无关字符。
答案 2 :(得分:0)
这不是匹配,因为转义字符(#和。)不是单词字符,因此在它和空白/等之间没有单词边界(\ b)。也许专门寻找空白/ bol / eol /等?