findall与match、search区别及小括号的注意事项
生活随笔
收集整理的這篇文章主要介紹了
findall与match、search区别及小括号的注意事项
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、問題起源:
需求:從文本中尋找所有的IP地址;
假設文本字符串:test = “xxx123.3.2.3abd 23.2.3.3”
IP正則表達式:((25[0-5]|2[0-4]\d|[01]?\d\d?).){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)
直接使用re.findall(pattern, test)沒有輸出預期結果,如圖所示:
二、尋找答案
1、定位正則表達的正確與否
使用search與match均能輸出正確的結果
結論:1、match一定是起始處開始匹配,search可以從任意位置進行匹配;正則表達式是正確的
2、當把括號全部展開時, 會怎么樣
結論:沒有括號時是可以找出所有的IP
3、findall與小括號有什么關系呢
百度搜索得到如下結論:
發現findall在正則表達式有括號和沒有括號的情況下,結果不同
在正則表達式有一個括號的時候,僅僅匹配括號內的內容
當有兩個括號時,它會分別匹配括號由內向外的內容,經結果存在元組中再給列表
找到一個解決辦法,用(?:re)的方法來去除組
結論:原來findall匹配的時候會僅僅返回括號內的內容
三、正確的答案
使用?:忽略括號內的匹配
四、結論
總結
以上是生活随笔為你收集整理的findall与match、search区别及小括号的注意事项的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ipaddr库计算区间IP及CIDR的I
- 下一篇: json文件中的双引号隐藏