天天看點

關于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)      

執行結果如下:

關于Python中正則使用findall和分組的一個坑

這裡findall如果使用了分組,則輸出的内容将是分組中的内容而非find到的結果,為了得到find到的結果。

解決方式,要加上問号來啟用“不捕捉模式”:

import re

xxx = "a123ca456c"

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

執行結果:

關于Python中正則使用findall和分組的一個坑
import re

xxx = "a123ca456c"

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