十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無(wú)憂售后,網(wǎng)站問(wèn)題一站解決
前幾天給大家分享了Python正則表達(dá)式初識(shí)(一),介紹了正則表達(dá)式中的三個(gè)特殊字符“^”、“.”和“*”,感興趣的伙伴可以戳進(jìn)去看看,今天小編繼續(xù)給大家分享Python正則表達(dá)式相關(guān)特殊字符知識(shí)點(diǎn)。
1、特殊字符“$”代表的意思是結(jié)尾字符。舉個(gè)栗子,正則表達(dá)式“3$”,表示匹配以3為結(jié)尾的字符串。代碼演示如下圖所示。
正則表達(dá)式匹配模式“.*3$”代表以3結(jié)尾的任意字符的字符串,很顯然匹配的結(jié)果和原始字符串是一致的,所以有返回結(jié)果。
2、如果將正則表達(dá)式匹配模式改為“.*4$”,則表示以4結(jié)尾的任意字符的字符串,此時(shí)是沒(méi)有任何的輸入結(jié)果的,如下圖所示。
3、正則表達(dá)式特殊字符“?”比較常用,其代表的意思是非貪婪匹配模式。默認(rèn)情況下,匹配字符串是一種貪婪的匹配,換句話說(shuō),默認(rèn)情況下字符串會(huì)根據(jù)匹配模式,去匹配大的長(zhǎng)度。
4、下圖是一個(gè)實(shí)例。其中括號(hào)代表的是提取字符串的子串,正則表達(dá)式會(huì)把滿足匹配條件的字符串放到括號(hào)里邊。匹配模式“.*(p.*p).*”代表的意思是:左邊的“.* ”的意思是任意字符串,可以是空,也可以是非空的字符串,之后是字符p,中間的“.* ” 的意思也是任意字符串,之后再是一個(gè)p,爾后右邊的“.* ” 的意思也是任意字符串。目前的邏輯就是將兩個(gè)p中間的字符串連同p一塊取出。
但是其輸出的結(jié)果卻為“pp”,并不是我們想要的“pccccccccccp”結(jié)果。原因是正則表達(dá)式的貪婪匹配所致,實(shí)際上它是反向匹配的,所以從字符串來(lái)看,匹配到的結(jié)果是“pp”。
5、如果我們使用非貪婪模式,即將匹配模式“.*(p.*p).*”改為模式“.*?(p.*p).*”,在第一“p”之前加個(gè)特殊字符“?”,則運(yùn)行的結(jié)果就如下圖所示。
可以看到匹配模式已經(jīng)開(kāi)始從左邊開(kāi)始進(jìn)行匹配,答案趨向于我們想要的結(jié)果。但是在后面卻出現(xiàn)了兩個(gè)p。原因是后面的那個(gè)p未指定其為非貪婪模式,所以后面的那個(gè)p仍然是從右邊開(kāi)始反向取值的。
6、接下來(lái),我們繼續(xù)使用非貪婪模式,即將匹配模式“.*(p.*p).*”改為模式“.*?(p.*?p).*”,在第二“p”之前也加個(gè)特殊字符“?”,則運(yùn)行的結(jié)果就如下圖所示。
此時(shí)可以看到匹配的結(jié)果就是我們想要的結(jié)果了,原因是此時(shí)兩個(gè)p均采用了非貪婪模式,所以匹配模式,從左到右順序進(jìn)行。
7、理解非貪婪模式之后,對(duì)于正則表達(dá)式的匹配就很好理解了,如下圖的結(jié)果將返回“pcccp”,非貪婪模式下。
8、下圖的結(jié)果將返回“pcccpcccccccpppp”,非貪婪模式和貪婪模式共存的情況下。
非貪婪模式在網(wǎng)絡(luò)爬蟲(chóng)的過(guò)程中對(duì)于字符串的提取非常重要,務(wù)必要理解和掌握。小伙伴們,關(guān)于正則表達(dá)式的特殊字符“$”和“?”的用法,你們get到了嗎?
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。