我正在尝试一种简单的正则表达式模式。但它的行为很奇怪。
re.findall('ABC\-\d{2}\-\d{3,5}(\[[A-Z]\])?', 'ABC-01-1234[Z],ABC-12-5678')
输出始终是:
['[Z]']
而我想要两个字符串,即 ABC-01-1234[Z],ABC-12-5678
作为我的匹配模式。 [Z]
是可选的。不知道为什么 ?
无法正常工作。
最佳答案
将您的正则表达式更改为:
re.findall('(ABC\-\d{2}\-\d{3,5}(?:\[[A-Z]\])?)', 'ABC-01-1234[Z],ABC-12-5678')
围绕整场比赛进行分组(...)
。以及您可能匹配的非捕获组 (?:...)
在 JS 中测试(不确定是否适用于 Python):
'ABC-01-1234[Z],ABC-12-5678'.match(/(ABC\-\d{2}\-\d{3,5}(?:\[[A-Z]\])?)/g); // ["ABC-01-1234[Z]", "ABC-12-5678"]
关于regex - 这个正则表达式模式有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27043484/