在才开始学习正则表达式处理时,老猿对正则表达式:re.match(r"(…)+", “a1b2c3”)
返回的匹配结果为“c3”没有理解,学习了贪婪模式的处理之后才明白,因为“+”的匹配是贪婪的,在匹配到结果后并不会停止,会继续匹配,直到匹配不到时再回退到上一个匹配位置作为匹配结果,因此"a1b2c3")匹配(…)时,先后匹配到“a1”、“b2”、“c3”,然后匹配失败,回退到上一次匹配结果“c3”,因此最后匹配结果是“c3”,如果是非贪婪模式则匹配结果是“a1”。
>>> m = re.match(r"(..)+", "a1b2c3") #贪婪模式
>>> m.groups()
('c3',)
>>> m = re.match(r"(..)+?", "a1b2c3") #非贪婪模式
>>> m.groups()
('a1',)
关于贪婪模式和非贪婪模式请参考:
第11.8节 Pytho正则表达式的重复匹配模式及元字符“?”、 “”、 “+”功能介绍
第11.9节 Python正则表达式的贪婪模式和非贪婪模式
第11.10节 Python正则表达式的非贪婪模式的重复匹配:’?’, ‘+?’,和 ‘??’