我正在尝试编写一个与U.S.
,D.C.
,U.S.A.
等值匹配的正则表达式。
这是我到目前为止所拥有的 -
\b([a-zA-Z]\.){2,}+
请注意此表达式如何匹配,但不包括首字母缩写词中的最后一个字母。
任何人都可以帮忙解释我在这里缺少的东西吗?
解
我在这里发布解决方案,以防万一。
\b(?:[a-zA-Z]\.){2,}
这里似乎需要非捕获组。
答案 0 :(得分:3)
尝试(?:[a-zA-Z]\.){2,}
?:
(非捕获组)是因为你想省略捕获重复组的最后一次迭代。
例如,没有?:
,'美国。'将产生一组你不感兴趣的小组赛。'
答案 1 :(得分:1)
这些提议的解决方案都没有做你的工作 - 确保首字母缩略词中至少有2个字母。此外,您的工作在http://rubular.com/。这可能是正则表达式实现的一些问题 - 公平地说,你得到的所有匹配都是有效的首字母缩略词。要解决此问题,您可以:
(?=\s|$)
)^
和$
围绕正则表达式,以确保它捕获整个字符串。您必须将整个字符串拆分为空格以获得与此匹配。我更喜欢以前的解决方案 - 要做到这一点,你必须:
\b([a-zA-Z]\.){2,}(?=\s|$)
编辑:我已经意识到这实际上并没有与字符串中的其他标点符号以及其他几个边缘情况一起使用。这非常难看,但我认为它应该足够好了:
(?<=\s|^)((?:[a-zA-Z]\.){2,})(?=[[:punct:]]?(?:\s|$))
这假定您已经拥有此[[:punct:]]字符类,并且在未被捕获的首字母缩略词后允许0-1标点符号。我也修好了它,以便有一个捕获组可以获得整个缩写词。在http://rubular.com/r/lmr0qERLDh
查看验证奖励:你现在可以让任何阅读它的人感到非常困惑。
答案 2 :(得分:0)
这应该有效:
/([a-zA-Z]\.)+/g