上一次很多朋友寫文字屏蔽說到要用正則表達,其實不是我不想用(我正則用得不是很多,看過我之前爬蟲的都知道,我直接用BeautifulSoup的網頁標籤去找內容,因為容易理解也方便,),而是正則用好用精通的很難(看過正則表的應該都知道,裡面符號對應的方法規則有很多,很靈活),對於接觸編程不久的朋友們來說很可能在程式設計的過程上浪費很多時間,今天我把經常會用到正規簡單介紹下,如果不是很特殊基本上都覆蓋使用。
1.正規的簡單介紹
首先你得導入正規方法import re正規表示式是用來處理字串的強大工具,擁有自己獨立的處理機制,效率上可能不如str自帶的方法,但功能十分靈活給力。它的運作過程是先定一個符合規則("你想要的內容+正規語法規則"),放入要匹配的字串,透過正規內部的機制就能檢索你想要的資訊。
2.findall的常用幾個姿勢
基本結構大致: nojoke = re.findall(r'匹配的規則','要檢索的願字串') nojoke就是我們最後透過正規回傳的結果,re正規findall查找全部r標識代表後面是正規的語句(這樣在程式碼多的時候好查閱),下面我們看看幾個例子好深入了解
#這段程式碼是找出檢索字串中所有的bi並以列表的形式返回,這個會經常用到計算統一字元出現的次數。繼續看下一個
這裡加了個符號^表示符合以abi開頭的的字串回傳,也可以判斷字串是否以abi開始的。
這裡在的用$符號表示以gbi結尾的字串回傳,判斷是否字串結束的字串。
這裡[...]的意思符合括號內a和f,或b和f,或c和f的值回傳列表。
“\d”是正規語法規則用來匹配0到9之間的數字返回列表,需要注意的是11會當成字串'1'和' 1'返回而不是返回'11'這個字串,切記用不好這裡是大坑。
當然解決的辦法就你要取幾位數就寫幾個\d,上面這裡示範取字串中3位數字,這裡展現了正則靈活一方面。
這裡小d表示取數字0-9,大D表示不要數字,也就是出了數字以外的內容回傳。
「\w」在正則裡面代表匹配從小寫a到z,大寫A到Z,數字0到9包含前面這三種的如上面打印的一樣.
"\W"在正則裡面代表匹配除了字母與數字以外的特殊符號,但這裡\斜槓的用法要注意在字串\是轉義符號具體百度去學。
#這裡括號()的用法表示匹配是取括號內裡面的內容,這裡.*是正則貪婪匹配語法百話點就是貪心利益最大話最大範圍的匹配準則如上圖所示。
這裡加了個問號.*?就是限制它不讓他最大範圍的匹配也叫非貪婪模式匹配。結果是把兩個p內的內容配對回來。
這裡加re.I(大寫的i)表示匹配無論公的母的大小寫都通吃都要,不然後面有大小寫就會出現上面匹配找不到返回空列表給你。
這裡又搞事了就是\n俗稱換行符,一旦換行程式就SB了不認了,所以我們加上了re.S(大寫)這樣代表比匹配包括換行在內的所有字符內容返回,基本你把上面的語法和用法學會後基本70%以上匹配方法全都搞定,當然還有很方法我就不列舉了,大家可以自己去學習(剩下的基本我都很少用到了)。
2.match和search的用法及區別:
re.match 嘗試從字串的起始位置匹配一個模式,如果不是起始位置匹配成功的話,match()就回傳none。 re.search 掃描整個字串並傳回第一個成功的匹配。來看看程式碼就容易理解了。如下:
這裡直接列印結尾加上.span()可以得到匹配字串的位置以元組tuple返回(起始位置,結束位置),有一個沒寫,因為他返回空加上會編譯器報錯。
是不是一目了然,match只會開頭匹配,找不到就返回None,這裡我沒加.group()是因為回傳值是空值我加了編譯器會報錯,search不挑食掃描整個字串,當然裡面也可以用上面的正則方法去匹配,這裡就不過多介紹了大家可以動手練練。
3.sub替換的用法
sub用於替換字串中的匹配項,語法一般是re.sub(r'正則匹配規則','替換的字串',需要檢索的字串)
這裡很直觀的反應了結果,把#號及後面的字串替換想要改的字串。
4.最後福利
在給最後福利之前,希望大家能多練練上面的用法和使用規則,只有多出錯多總結才會累積經驗,最後的福利講給大家幾個常用的郵箱匹配規則如下:
以上是使用python正規的指南圖解的詳細內容。更多資訊請關注PHP中文網其他相關文章!