python正則表達式方法match(),search(),findall(),sub(),compile()(官方文檔解釋)一分鐘看懂

match()在官方文檔中是這樣定義的

如果 string 開始的0或者多個字符匹配到了正則表達式樣式,就返回一個相應的 匹配對象 。 如果沒有匹配,就返回 None ;注意它跟零長度匹配是不同的。

注意即便是 MULTILINE 多行模式, re.match() 也只匹配字符串的開始位置,而不匹配每行開始。

如果你想定位 string 的任何位置,使用 search() 來替代

簡而言之,match()方法是從字符串的開頭開始匹配的,一旦開頭不匹配,那麼整個匹配就失敗

 

search()在官方文檔中是這樣定義的

掃描整個 字符串 找到匹配樣式的第一個位置,並返回一個相應的 匹配對象。如果沒有匹配,就返回一個 None ; 注意這和找到一個零長度匹配是不同的。

簡而言之,search()在匹配時會掃描整個字符串,然後返回第一個重新匹配的結果,也就是說,正則表達式可以是字符串的一部分

 

findall()在官方文檔中是這樣定義的

findall(patternstringflags=0)

對 string 返回一個不重複的 pattern 的匹配列表, string 從左到右進行掃描,匹配按找到的順序返回。

如果樣式裏存在一到多個組,就返回一個組合列表;就是一個元組的列表(如果樣式裏有超過一個組合的話)。空匹配也會包含在結果裏。

簡而言之,search()會搜索整個字符串,然後返回所有匹配內容。

 

sub()在官方文檔中是這樣定義的

re.sub(patternreplstringcount=0flags=0)

返回通過使用 repl 替換在 string 最左邊非重疊出現的 pattern 而獲得的字符串。 如果樣式沒有找到,則不加改變地返回 string。 repl 可以是字符串或函數;如爲字符串,則其中任何反斜槓轉義序列都會被處理。 也就是說,\n 會被轉換爲一個換行符,\r 會被轉換爲一個回車附,依此類推。 未知的 ASCII 字符轉義序列保留在未來使用,會被當作錯誤來處理。 其他未知轉義序列例如 \& 會保持原樣。 向後引用像是 \6 會用樣式中第 6 組所匹配到的子字符串來替換。

如果 repl 是一個函數,那它會對每個非重複的 pattern 的情況調用。這個函數只能有一個 匹配對象 參數,並返回一個替換後的字符串。

可選參數 count 是要替換的最大次數;count 必須是非負整數。如果忽略這個參數,或者設置爲0,所有的匹配都會被替換。空匹配只在不相臨連續的情況被更替,所以 sub('x*', '-', 'abxd') 返回 '-a-b--d-' 。

在字符串類型的 repl 參數裏,如上所述的轉義和向後引用中,\g<name> 會使用命名組合 name,(在 (?P<name>…) 語法中定義) \g<number> 會使用數字組;\g<2> 就是 \2,但它避免了二義性,如 \g<2>0。 \20 就會被解釋爲組20,而不是組2後面跟隨一個字符 '0'。向後引用 \g<0> 把 pattern 作爲一整個組進行引用。

是不是有點繁瑣,其實蠻簡單,我們主要用到前三個參數sub(patternreplstring),後面可選參數很少用

簡而言之,pattern是要匹配目標的正則表達式,reple是替換匹配目標的,string是正則表達式要匹配的文本。

 

compile()是將一個正則表達式編譯成一個正則表達式對象,簡而言之,就是將正則表達式內容封裝起來。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章