我正在尝试使用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)
但显然我做错了什么。我想知道为什么这个解决方案不起作用以及如何改变它,以便我得到我正在寻找的结果。
答案 0 :(得分:3)
正则表达式代表greedy
,因为它将接受第一个匹配。在您的示例中,第一个捕获组是您的特定输入。替换表达式(由|
发出信号)将始终与样本字符串满足的第一个替代项匹配。
看起来你正试图制作一个switch
和case
类型的正则表达式,这是无法完成的,因为它需要回溯{{1}之间的每个不同的不同子正则表达式}}的。单个正则表达式无法实现您希望实现的结果。
另见: