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


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

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

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

但是一开始是这样的

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

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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM