python淺談正則的常用方法

發表於2017-03-01

python淺談正則的常用方法覆蓋範圍70%以上

上一次很多朋友寫文字遮蔽說到要用正則表達,其實不是我不想用(我正則用得不是很多,看過我之前爬蟲的都知道,我直接用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”在正則裡面代表匹配除了字母與數字以外的特殊符號,但這裡斜槓的用法要注意在字串是轉義符號具體百度去學。

這裡括號()的用法表示匹配是取括號內裡面的內容,這裡.*是正則貪婪匹配語法百話點就是貪心利益最大話最大範圍的匹配準則如上圖所示。

這裡加了個問號.*?就是限制它不讓他最大範圍的匹配也叫非貪婪模式匹配。結果是把兩個div內的內容匹配返回。

這裡加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.最後福利

在給最後福利之前,希望大家能多練練上面的用法和使用規則,只有多出錯多總結才會積累經驗,最後的福利講給大家幾個常用的郵箱匹配規則如下:

必殺技能最後送了合體多種匹配或者發|用來匹配多個不同的郵箱使用,大家只要用熟以上的方法保守70%以上的地方都能夠使用到,最後宣告只是小弟個人理解分享,大佬們忽略就忽略吧,謝謝,最後還還是老臺詞:感謝觀看,下次再見!

相關文章