关于Python中正则使用findall和分组的一个坑

Posted Mike江

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于Python中正则使用findall和分组的一个坑相关的知识,希望对你有一定的参考价值。

首先,findall有两种用法:

import re
re.findall(string[, pos[, endpos]])
re.findall(pattern, string[, flags])

这里讲的是第二种,里面有一个坑。

测试代码:

import re

xxx = "a123ca456c"

ret = re.findall(r"a(123|456)c", xxx)
print(ret)

执行结果如下:

这里findall如果使用了分组,则输出的内容将是分组中的内容而非find到的结果,为了得到find到的结果。

解决方式,要加上问号来启用“不捕捉模式”:

import re

xxx = "a123ca456c"

ret = re.findall(r"a(?:123|456)c", xxx)
print(ret)

执行结果:

或者:

import re

xxx = "a123ca456c"

ret = re.findall(r"a123c|a456c", xxx)
print(ret)

参考资料:https://blog.csdn.net/samed/article/details/50555663

以上是关于关于Python中正则使用findall和分组的一个坑的主要内容,如果未能解决你的问题,请参考以下文章

Python正则表达式之findall疑点

如何解决python的re模块groupgroups与findall遇见正则表达式中分组"()"后产生的”眩晕反应“

Python中的正则表达式?

Python 正则re模块之compile()和findall()详解

python 正则表达式

模块-re模块