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

本文关键字:不匹配 正则表达式 net 单词 分隔符 为什么 | 更新日期: 2023-09-27 18:11:20

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

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

作为一个例子,我试图使它匹配如下:

Ace Charter High School LLC. East Liberty  

我希望表达式选择'LLC.',但它没有选择任何匹配,我不知道为什么。
我试过使用RegexBuddy调试表达式,如果我删除尾部的''b',它就会起作用,但这不是我想要的,因为我在

之前解释过

有人知道为什么这不起作用吗?

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

没有匹配最后一个'b的词边界。

最近的单词边界在LLC之后和East之前,并且您的模式不允许最后一个'b出现在这些地方。

Try

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

这允许在字边界之前的空白(Guffa指出的在空格和E之间),而不包括匹配组" target "中的空白。

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

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

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

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