首先,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)

执行结果如下:

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

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

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

import re

xxx = "a123ca456c"

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

执行结果:

关于Python中正则使用findall和分组的一个坑_正则表达式_02

或者:

import re

xxx = "a123ca456c"

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