Python網(wǎng)絡(luò)爬蟲之正則表達(dá)式(二)

1?re模塊


Python通過re模塊提供對正則表達(dá)式的支持,使用re的一般步驟是先將正則表達(dá)式的字符串形式編譯為Pattern實例,然后使用Pattern實例處理文本并獲得匹配結(jié)果(一個Match實例),最后使用Match實例獲得信息,進(jìn)行其他的操作。


還是直接上代碼:

上述代碼的輸出結(jié)果為:hello。

Pattern不能直接實例化,必須使用re.compile()進(jìn)行構(gòu)造。Pattern對象是一個編譯好的正則表達(dá)式,通過Pattern提供的一系列方法可以對文本進(jìn)行匹配查找。pattern也可以理解為一個匹配模式。


接下來講解一下Match對象,Match對象是一次匹配的結(jié)果,包含了很多關(guān)于此次匹配的信息,可以使用Match提供的可讀屬性或方法來獲取這些信息。


屬性:

string:?匹配時使用的文本。

re:?匹配時使用的Pattern對象。

pos:?文本中正則表達(dá)式開始搜索的索引。值與Pattern.match()和Pattern.seach()方法的同名參數(shù)相同。

endpos:?文本中正則表達(dá)式結(jié)束搜索的索引。值與Pattern.match()和Pattern.seach()方法的同名參數(shù)相同。

lastindex:?最后一個被捕獲的分組在文本中的索引。如果沒有被捕獲的分組,將為None。

lastgroup:?最后一個被捕獲的分組的別名。如果這個分組沒有別名或者沒有被捕獲的分組,將為None。?


方法:

group([group1,?…]):?獲得一個或多個分組截獲的字符串;指定多個參數(shù)時將以元組形式返回。group1可以使用編號也可以使用別名;編號0代表整個匹配的子串;不填寫參數(shù)時,返回group(0);沒有截獲字符串的組返回None;截獲了多次的組返回最后一次截獲的子串。

groups([default]):?以元組形式返回全部分組截獲的字符串。相當(dāng)于調(diào)用group(1,2,…last)。default表示沒有截獲字符串的組以這個值替代,默認(rèn)為None。

groupdict([default]):?返回以有別名的組的別名為鍵、以該組截獲的子串為值的字典,沒有別名的組不包含在內(nèi)。default含義同上。


2?re.compile(string[,flag])


此方法是通過第一個參數(shù)傳入正則表達(dá)式的原生字符串,就可以編譯生成pattern對象,還有另一參數(shù)flag是匹配模式,取值可以使用位運(yùn)算符“|”來表示同時生效,具體的選值及其含義如下:

re.I(全拼:IGNORECASE):?忽略大小寫(括號內(nèi)是完整寫法,下同)

re.M(全拼:MULTILINE):?多行模式,改變'^'和'$'的行為

re.S(全拼:DOTALL):?點(diǎn)任意匹配模式,改變'.'的行為

re.L(全拼:LOCALE):?使預(yù)定字符類?\w?\W?\b?\B?\s?\S?取決于當(dāng)前區(qū)域設(shè)定

re.U(全拼:UNICODE):?使預(yù)定字符類?\w?\W?\b?\B?\s?\S?\d?\D?取決于unicode定義的字符屬性

re.X(全拼:VERBOSE):?詳細(xì)模式。這個模式下正則表達(dá)式可以是多行,忽略空白字符,并可以加入注釋。


3?re.match(pattern,?string[,?flags])


這個方法將會從string的開頭開始,嘗試匹配pattern,一直向后匹配,如果遇到無法匹配的字符,立即返回None,如果匹配未結(jié)束已經(jīng)到達(dá)string的末尾,也會返回None。兩個結(jié)果均表示匹配失敗,否則匹配pattern成功,同時匹配終止,不再對string向后匹配。


方法使用參考代碼如下:?

輸出為:hello


4 re.search(pattern,?string[,?flags])

search方法與match方法極其類似,區(qū)別在于match()函數(shù)只檢測re是不是在string的開始位置匹配,search()會掃描整個string查找匹配,match()只有在0位置匹配成功的話才有返回,如果不是開始位置匹配成功的話,match()就返回None。同樣,search方法的返回對象同樣match()返回對象的方法和屬性。


方法使用參考代碼如下:

輸出為:world


5?re.split(pattern,?string[,?maxsplit])


按照能夠匹配的子串將string分割后返回列表。maxsplit用于指定最大分割次數(shù),不指定將全部分割。


方法使用參考代碼如下:


輸出為:['one',?'two',?'three']


6?re.findall(pattern,?string[,?flags])


搜索string,以列表形式返回全部能匹配的子串。


方法使用參考代碼如下:

輸出為:['1',?'2']


7?Re模塊的另一種使用方法

上面諸如match、search等方法的調(diào)用,還可以通過pattern.match和pattern.search方法來完成,這樣就避免了將pattern作為第一個參數(shù)傳入啦,到底用那種方法,看個人的習(xí)慣就好。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容