当前位置:首页 > Python教程 > python技巧

Python 正则表达式 捕获组和非捕获组

参考链接:https://www.cnblogs.com/kevin-yuan/archive/2012/11/11/2765340.html

我希望的匹配结果是这样的

>>> d
a1a2a3a4a5a6
>>> re.findall(r(?:wd){5},d)
[a1a2a3a4a5]

但是一开始是这样的

>>> d
a1a2a3a4a5a6
>>> re.findall(r(wd){5},d)
[a5]

发现使用分组时错误的,经过从网络查找,发现是因为捕获组和非捕获组的原因。(...)是捕获组,将括号内的规则视为一个整体,有一个回溯引用,将所有匹配的分组保存在内存中,引用分组的时候引用匹配出的文本。非捕获组(?:...)仅仅匹配文本,但是不会捕获文本保存到内存中。但是关于回溯的引用,暂时还没有理解明白。网络中很多地方使用1来引用捕获组的子表达式相对位置,但是我使用的是{},也回溯成功了。网络中给出的实例运行后得到的结果和实例给出的结果不一致。

原文:https://www.cnblogs.com/learning-logs/p/12979493.html


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!