正则表达式找到包含转义字符的单词

时间:2009-07-17 09:52:07

标签: c# vb.net regex

我使用一个简单的正则表达式(在C#中)来查找文本块中的整个单词。

该单词可能出现在文本中的文本或句子的开头,结尾或中间。

我一直在使用\bword\b的表达式已经正常工作,但是如果单词包含一个特殊字符(已被转义),则它不再有效。边界是必不可少的,因此我们不会选择像vb.net这样的单词来匹配.net。

两个失败的例子是:

\bc\#\b

\b\.net\b

我可以将单词边界更改为其他检查列表,例如不在起始非空格等处。但是这很复杂,如果在大量单词上使用,可能会很慢。

3 个答案:

答案 0 :(得分:3)

\b匹配单词字符和非单词字符之间的边界,但不匹配两个非单词字符之间的边界。

例如,在C#的情况下,C(一个单词字符)和#(一个非单词字符)之间存在边界,但#之间没有(?:^|\W)。 1}}以及其后的任何内容(空格,标点符号,字符串结尾等)。

您可以按如下方式解决此问题:

  • 在表达式的开头使用\b代替(?:^|\W)\.NET\b 例如,.
    这将匹配字符串开头或(?:\W|$)字符前的非单词字符。
  • 在表达式的末尾使用\b代替\bC#(?:\W|$) 例如,#
    这将匹配非单词字符或{{1}}字符后的字符串结尾。

答案 1 :(得分:3)

我建议使用负面看法:

(?<!\w)c#(?!\w)

(?<!\w)\.net(?!\w)

这应该比匹配锚点或非单词字符(如(?:^|\W))更快,而且当匹配的\W时,您不必处理无关字符。

答案 2 :(得分:0)

这不是匹配,因为转义字符(#和。)不是单词字符,因此在它和空白/等之间没有单词边界(\ b)。也许专门寻找空白/ bol / eol /等?