为什么这个使用单词分隔符(\ b)的正则表达式不匹配.Net中的示例?

时间:2013-04-29 22:02:26

标签: c# .net regex

应该足够简单,但是这个不起作用的东西令人困惑,任何洞察力的原因都非常感谢。
我试图将缩写词的任何实例与任意数量的尾随'。','/'或' - '匹配。注意我正在使用'\ b'来尝试抓取整个'单词',包括上面提到的尾随字符,但不包含任何后续字符(它还具有匹配行或字符串末尾的优点)。 我正在使用以下表达式:

(?<target>\bLLC[\./\-]+\b)  

举个例子,我试图让它与之匹配:

Ace Charter High School LLC. East Liberty  

我希望表达式选择“LLC”。但相反,它不会选择任何匹配,我不知道为什么 我已经尝试使用RegexBuddy调试表达式,如果我删除尾随的'\ b',但是这不是我想要的,正如我之前解释的那样

任何人都知道为什么这不起作用?

3 个答案:

答案 0 :(得分:1)

没有与最后\b匹配的单词边界。

最近的单词边界位于LLC之后和East之前,您的模式不允许最后\b位于这两个位置。

答案 1 :(得分:1)

尝试

(?<target>\bLLC[\./\-]+)\s*\b

这允许在单词边界之前的空格(在空格和E之间作为Guffa指出),而不包括匹配组“target”中的那些空格。

另一方面,在.之后匹配单词边界并没有获得太多,因为标点符号会导致单词边界,除非它后跟其他标点符号。

答案 2 :(得分:1)

我得到了很好的回应,指出了我正确的方向,但没有人真正提出使用'\ b'的替代方案,它在目标方面具有相同的效果,并且会匹配分隔符以及字符串的结尾 正如Guffa指出的那样,问题在于我使用'\ b'作为选择任何分隔符的方法,或者在该分隔符之前的位置选择字符串的结尾,而实际上它实际上就像它所代表的一样:一个单词分隔器。因为我的选择器已经位于单词之外的位置,所以它不匹配,因为这个位置(在'。'之后)既不是单词的开头也不是单词的结尾,因此整个字符串中没有匹配比赛后仍需要目标后的'\ b' 我终于决定使用以下表达式了:

(?<target>\bLLC[\./\-]+)([^a-zA-Z0-9]|$)

这匹配任何非字母数字字符以及字符串的结尾,并且在产生我想要的相同效果之前或之后,将匹配“目标”组而没有任何分隔字符。 再次感谢您的回复,并希望这将有助于其他类似的问题