应该足够简单,但是这个不起作用的东西令人困惑,任何洞察力的原因都非常感谢。
我试图将缩写词的任何实例与任意数量的尾随'。','/'或' - '匹配。注意我正在使用'\ b'来尝试抓取整个'单词',包括上面提到的尾随字符,但不包含任何后续字符(它还具有匹配行或字符串末尾的优点)。
我正在使用以下表达式:
(?<target>\bLLC[\./\-]+\b)
举个例子,我试图让它与之匹配:
Ace Charter High School LLC. East Liberty
我希望表达式选择“LLC”。但相反,它不会选择任何匹配,我不知道为什么 我已经尝试使用RegexBuddy调试表达式,如果我删除尾随的'\ b',但是这不是我想要的,正如我之前解释的那样
任何人都知道为什么这不起作用?
答案 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]|$)
这匹配任何非字母数字字符以及字符串的结尾,并且在产生我想要的相同效果之前或之后,将匹配“目标”组而没有任何分隔字符。 再次感谢您的回复,并希望这将有助于其他类似的问题