正则表达式声明检查3个大写字母?

Hay*_*aas 3 python regex

我需要一个正则表达式声明,它将检查行中的3个大写字母.

例如,它应匹配:ABC,aABC,abcABC

但它不应该匹配:AaBbBc,ABCDE

目前这是我的发言:

'[^A-Z]*[A-Z]{3}[^A-Z]*'
Run Code Online (Sandbox Code Playgroud)

但这符合ABCDE,我做错了什么?

提前致谢.

Vas*_*kis 5

正则表达式

(?<![A-Z])[A-Z]{3}(?![A-Z])
Run Code Online (Sandbox Code Playgroud)

说明

我分别在连续3个大写的中间正则表达式之前和之后指定了负面后观和负面前瞻.

与使用否定字符类相比,这是一个更好的选项,因为即使字符串的左侧或右侧没有字符,它也会成功匹配.

在线演示

DEMO


至于Python代码,我还没想出如何打印出实际匹配,
但这是语法:

使用re.match:

>>> import re
>>> p = re.compile(r'(?<![A-Z])[A-Z]{3}(?![A-Z])')
>>> s = '''ABC
... aABC
... abcABCabcABCDabcABCDEDEDEDa
... ABCDE'''
>>> result = p.match(s)
>>> result.group()
'ABC'
Run Code Online (Sandbox Code Playgroud)

使用re.search:

>>> import re
>>> p = re.compile(r'(?<![A-Z])[A-Z]{3}(?![A-Z])')
>>> s = 'ABcABCde'
>>> p.search(s).group()
'ABC'
Run Code Online (Sandbox Code Playgroud)

  • 使用`p.search`而不是`p.match`通过我的临时测试,例如`p.search('aABC')`(`match`失败)和`p.search('ABcABCde')`. (2认同)