这个正则表达式有什么问题?

时间:2014-11-20 15:36:50

标签: regex python-2.7

我正在尝试一个简单的正则表达式模式。但它表现得很奇怪。

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]是可选的。不知道为什么?无法正常工作。

1 个答案:

答案 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"]