1. 程式人生 > >Python正則表示式初識(二)

Python正則表示式初識(二)

前幾天給大家分享了Python正則表示式初識(一),介紹了正則表示式中的三個特殊字元“^”、“.”和“*”,感興趣的夥伴可以戳進去看看,今天小編繼續給大家分享Python正則表示式相關特殊字元知識點。

1、特殊字元“$”代表的意思是結尾字元。舉個栗子,正則表示式“3$”,表示匹配以3為結尾的字串。程式碼演示如下圖所示。

正則表示式匹配模式“.*3$”代表以3結尾的任意字元的字串,很顯然匹配的結果和原始字串是一致的,所以有返回結果。 2、如果將正則表示式匹配模式改為“.*4$”,則表示以4結尾的任意字元的字串,此時是沒有任何的輸入結果的,如下圖所示。

3、正則表示式特殊字元“?”比較常用,其代表的意思是非貪婪匹配模式。預設情況下,匹配字串是一種貪婪的匹配,換句話說,預設情況下字串會根據匹配模式,去匹配最大的長度。 4、下圖是一個例項。其中括號代表的是提取字串的子串,正則表示式會把滿足匹配條件的字串放到括號裡邊。匹配模式“.*(p.*p).*”代表的意思是:左邊的“.* ”的意思是任意字串,可以是空,也可以是非空的字串,之後是字元p,中間的“.* ” 的意思也是任意字串,之後再是一個p,爾後右邊的“.* ” 的意思也是任意字串。目前的邏輯就是將兩個p中間的字串連同p一塊取出。

但是其輸出的結果卻為“pp”,並不是我們想要的“pccccccccccp”結果。原因是正則表示式的貪婪匹配所致,實際上它是反向匹配的,所以從字串來看,匹配到的結果是“pp”。 5、如果我們使用非貪婪模式,即將匹配模式“.*(p.*p).*”改為模式“.*?(p.*p).*”,在第一“p”之前加個特殊字元“?”,則執行的結果就如下圖所示。

可以看到匹配模式已經開始從左邊開始進行匹配,答案趨向於我們想要的結果。但是在後面卻出現了兩個p。原因是後面的那個p未指定其為非貪婪模式,所以後面的那個p仍然是從右邊開始反向取值的。 6、接下來,我們繼續使用非貪婪模式,即將匹配模式“.*(p.*p).*”改為模式“.*?(p.*?p).*”,在第二“p”之前也加個特殊字元“?”,則執行的結果就如下圖所示。

此時可以看到匹配的結果就是我們想要的結果了,原因是此時兩個p均採用了非貪婪模式,所以匹配模式,從左到右順序進行。 7、理解非貪婪模式之後,對於正則表示式的匹配就很好理解了,如下圖的結果將返回“pcccp”,非貪婪模式下。

8、下圖的結果將返回“pcccpcccccccpppp”,非貪婪模式和貪婪模式共存的情況下。

非貪婪模式在網路爬蟲的過程中對於字串的提取非常重要,務必要理解和掌握。小夥伴們,關於正則表示式的特殊字元“$”和“?”的用法,你們get到了嗎?