Python匹配仅捕获第一组

时间:2012-12-03 14:20:44

标签: python regex match

我正在尝试使用python yo match string。

>> self._regexs = re.compile("(?P<g0>.*AMD$)|(?P<g1>.*AMD$)|(?P<g2>.*AMD$)|(?P<g3>.*)", re.DEBUG)
>> m = self._regexs.match("AMD")
>> print m.groups()
('AMD', None, None, None)

我原本预计m.groups()会显示:

>> print m.groups()
('AMD', 'AMD', 'AMD', None) 

但显然我做错了什么。我想知道为什么这个解决方案不起作用以及如何改变它,以便我得到我正在寻找的结果。

1 个答案:

答案 0 :(得分:3)

正则表达式代表greedy,因为它将接受第一个匹配。在您的示例中,第一个捕获组是您的特定输入。替换表达式(由|发出信号)将始终与样本字符串满足的第一个替代项匹配。

看起来你正试图制作一个switchcase类型的正则表达式,这是无法完成的,因为它需要回溯{{1}之间的每个不同的不同子正则表达式}}的。单个正则表达式无法实现您希望实现的结果。

另见: