[英]Using regex to find abbreviations
我正在尝试创建一个正则表达式,该表达式将识别 Python 中给定字符串中可能的缩写。我对 RegEx 有点陌生,虽然我相信它应该有点简单,但我在创建表达式时遇到了困难。 该表达式应选择具有两个或更多大写字母的单词。 该表达式还应该能够拾取中间使用破折号的单词并报告整个单词(破折号前后)。 如果数字也存在,他们也应该用这个词来报告。
因此,它应该拿起:
ABC、AbC、ABc、A-ABC、a-ABC、ABC-a、ABC123、ABC-123、123-ABC。
我已经做了以下表达: r'\b(?:[az]*[AZ\-][az\d[^\]*]*){2,}'
。
然而,这也确实会出现这些错误的词:
A-BC, abc
我认为问题在于它寻找多个大写字母或破折号。 我希望它只给我至少有两个或更多大写字母的单词。 我知道它也会“错误地”将单词视为“Abc-Abc”,但我认为没有办法避免这些。
如果支持前瞻并且您不想匹配双精度--
您可以使用:
\b(?=(?:[a-z\d-]*[A-Z]){2})[A-Za-z\d]+(?:-[A-Za-z\d]+)*\b
解释
\b
单词边界(?=
Positive lookahead,断言从当前位置到右边是
(?:[az\d-]*[AZ]){2}
匹配 2 倍可选的允许字符和大写字符 AZ)
关闭前瞻[A-Za-z\d]+
匹配 1+ 次不带连字符的允许字符(?:-[A-Za-z\d]+)*
可选择重复-
和 1+ 次允许的字符\b
单词边界请参阅regex101 演示。
要在字符周围有连字符时也不匹配,您可以使用否定环视断言左侧或右侧没有连字符。
\b(?<!-)(?=(?:[a-z\d-]*[A-Z]){2})[A-Za-z\d]+(?:-[A-Za-z\d]+)*\b(?!-)
请参阅另一个正则表达式演示。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.