1. 程式人生 > >Python中re.findall()跟re.search()得到的匹配值不一樣的問題

Python中re.findall()跟re.search()得到的匹配值不一樣的問題

問題描述:

a = '1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))'
ret = re.findall('\(([1-9]|\-).*?\)',a)
print(ret)
#執行結果
['6', '9', '-', '1']
a = '1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))'
ret = re.search('\(([1-9]|\-).*?\)',a)
print(ret)
#執行結果
(60-30+(-40/5)

明顯下面這種才是我們想要的結果,但是findall為什麼只返回了幾個字母?其實原因就是findall中的小括號是來定義具體匹配結果邊界,也就是findall返回的是小括號中的匹配物件,而不是整個單引號中的,而search中是將小括號作為一個優先順序的判斷符號,所以兩者的結果會不一樣。