match()在官方文檔中是這樣定義的
如果 string 開始的0或者多個字符匹配到了正則表達式樣式,就返回一個相應的 匹配對象 。 如果沒有匹配,就返回
None
;注意它跟零長度匹配是不同的。注意即便是
MULTILINE
多行模式,re.match()
也只匹配字符串的開始位置,而不匹配每行開始。如果你想定位 string 的任何位置,使用
search()
來替代
簡而言之,match()方法是從字符串的開頭開始匹配的,一旦開頭不匹配,那麼整個匹配就失敗
search()在官方文檔中是這樣定義的
掃描整個 字符串 找到匹配樣式的第一個位置,並返回一個相應的 匹配對象。如果沒有匹配,就返回一個
None
; 注意這和找到一個零長度匹配是不同的。
簡而言之,search()在匹配時會掃描整個字符串,然後返回第一個重新匹配的結果,也就是說,正則表達式可以是字符串的一部分
findall()在官方文檔中是這樣定義的
findall
(pattern, string, flags=0)對 string 返回一個不重複的 pattern 的匹配列表, string 從左到右進行掃描,匹配按找到的順序返回。
如果樣式裏存在一到多個組,就返回一個組合列表;就是一個元組的列表(如果樣式裏有超過一個組合的話)。空匹配也會包含在結果裏。
簡而言之,search()會搜索整個字符串,然後返回所有匹配內容。
sub()在官方文檔中是這樣定義的
re.
sub
(pattern, repl, string, count=0, flags=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
(pattern, repl, string),後面可選參數很少用
簡而言之,pattern是要匹配目標的正則表達式,reple是替換匹配目標的,string是正則表達式要匹配的文本。
compile()是將一個正則表達式編譯成一個正則表達式對象,簡而言之,就是將正則表達式內容封裝起來。