1

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

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

作为一个例子,我试图让它匹配这个:

Ace Charter High School LLC. East Liberty  

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

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

4

3 回答 3

1

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

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

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

于 2013-04-30T14:30:18.300 回答
1

尝试

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

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

另一方面,在 the 之后匹配单词边界.并没有给你带来太多好处,因为标点符号会导致单词边界,除非它后面跟着其他标点符号。

于 2013-04-29T22:07:15.453 回答
1

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

最接近的单词边界是 afterLLC和 before East,并且您的模式不允许最后\b一个位于这些位置中的任何一个。

于 2013-04-29T22:06:24.130 回答