我正在尝试一个简单的正则表达式模式。但它表现得很奇怪。
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]
是可选的。不知道为什么?
无法正常工作。
答案 0 :(得分:3)
将正则表达式更改为:
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"]