今天遇到一個(gè)問題,在使用python的re.findall和re.search的過程中,發(fā)現(xiàn)一個(gè)奇怪的事情,同樣的表達(dá)式,兩者的表現(xiàn)卻不一樣,例如下述代碼:
s = "gpdk090_nmos1v #(.w(1.5e-6), .l(2.8e-07), .as(9e-13), .ad(4.5e-13), .ps(4.2e-06), .pd(2.1e-06), .m((1)*(2)))"
r1 = "#\((.*?\(.*?\)){0,}\)"
res = re.findall(r1, s)
res1 = re.search(r1,s).group()
print res, res1
'''
輸出的結(jié)果分表示
res = ['*(2)']
res1 = #(.w(1.5e-6), .l(2.8e-07), .as(9e-13), .ad(4.5e-13), .ps(4.2e-06), .pd(2.1e-06), .m((1)*(2))
'''
res1是我所希望的結(jié)果,然后查了一段時(shí)間的原因,發(fā)現(xiàn)二者是在使用捕獲分組(xxx)和非捕獲分組(?:xxx)有區(qū)別,re.search使用的是非捕獲方式,re.findall使用的是捕獲方式,具體原因可以查下官方解釋
要使用re.findall的解決方式
正則表達(dá)式修改為:r1 = “#((?:.?(.?)){0,})”,然后就能匹配到所有符合要求的子串了。
30分鐘學(xué)會(huì)正則表達(dá)式請點(diǎn)這里,這個(gè)文章非常好用文章來源:http://www.zghlxwxcb.cn/news/detail-595046.html
加油,打工人!文章來源地址http://www.zghlxwxcb.cn/news/detail-595046.html
到了這里,關(guān)于python re.findall和re.search同樣的正則表達(dá)式,為什么規(guī)則不一樣??的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!