findall与match、search区别及小括号的注意事项
一、問(wèn)題起源:
需求:從文本中尋找所有的IP地址;
假設(shè)文本字符串:test = “xxx123.3.2.3abd 23.2.3.3”
IP正則表達(dá)式:((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)沒(méi)有輸出預(yù)期結(jié)果,如圖所示:
二、尋找答案
1、定位正則表達(dá)的正確與否
使用search與match均能輸出正確的結(jié)果
結(jié)論:1、match一定是起始處開(kāi)始匹配,search可以從任意位置進(jìn)行匹配;正則表達(dá)式是正確的
2、當(dāng)把括號(hào)全部展開(kāi)時(shí), 會(huì)怎么樣
結(jié)論:沒(méi)有括號(hào)時(shí)是可以找出所有的IP
3、findall與小括號(hào)有什么關(guān)系呢
百度搜索得到如下結(jié)論:
發(fā)現(xiàn)findall在正則表達(dá)式有括號(hào)和沒(méi)有括號(hào)的情況下,結(jié)果不同
在正則表達(dá)式有一個(gè)括號(hào)的時(shí)候,僅僅匹配括號(hào)內(nèi)的內(nèi)容
當(dāng)有兩個(gè)括號(hào)時(shí),它會(huì)分別匹配括號(hào)由內(nèi)向外的內(nèi)容,經(jīng)結(jié)果存在元組中再給列表
找到一個(gè)解決辦法,用(?:re)的方法來(lái)去除組
結(jié)論:原來(lái)findall匹配的時(shí)候會(huì)僅僅返回括號(hào)內(nèi)的內(nèi)容
三、正確的答案
使用?:忽略括號(hào)內(nèi)的匹配
四、結(jié)論
總結(jié)
以上是生活随笔為你收集整理的findall与match、search区别及小括号的注意事项的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ipaddr库计算区间IP及CIDR的I
- 下一篇: json文件中的双引号隐藏