模糊匹配:
\d:匹配一個數字(digit)
\D:匹配一個非數字
re.search(r"\d","abc123abc"),其中,r表示原字符,里面的\不需要做轉義。
\w:匹配字母或數字
\W:匹配非字母且也是非數字的情況
\s:匹配一個空白字符,比如:空格、\n \r \t
\S:匹配一個非空白字符
[A-Z]:匹配大寫字母
[a-z]:匹配小寫字母
[a-zA-Z]:匹配大小寫字母
嘗試匹配多個:
+:匹配至少一個(可以匹配多個);
*:匹配0個或者多個;
{n,m}:匹配n個或者m個之間的個數都行;
?:表示匹配一個或0個;
帶有量詞的情況下,正則都會進行最多元素的匹配(正則表達式的貪婪性)。
抑制正則表達式的貪婪性,量詞后面加?
.:表示出了回車之外的任意字符;
加個re.S可以實現.匹配回車,也就是匹配包括回車的所有字符;
開頭和結尾的匹配:^ $
\b:單詞邊界,字符串的最前面和最后面,或者前面有空白字符;
re.M:把一個帶有回車的字符串,當成多行字符串處理
re.search(r"\d+$","123\n456\n789",re.M)
|:或的關系,匹配其中一個就可以
*:匹配0個或者多個;
re.search(r"\d*","we2356bc").group(),當我們匹配w字符的時候,w字符的前面沒有數字,沒有數字就是0個數字,沒有數字也滿足\d*,因為*表示匹配0次或者多次。此處的\d*匹配到了w前面的空字符串。
?:表示匹配一個或0個;
{n,m}:匹配n個或者m個之間的個數都行;
.:表示出了回車之外的任意字符;
匹配大小寫混合:[a-zA-Z],或者re.I都可以。re.I表示的就是忽略大小寫的。
開頭和結尾的匹配:
\b:單詞邊界,字符串的最前面和最后面,或者前面有空白字符;
re.M:把一個帶有回車的字符串,當成多行字符串處理(比如,下面例子中第一行就滿足了我匹配到結尾的數字了,所以就返回123了)
re.M:findall用的多一些,比如多行字符串的情況下我想匹配每一行結尾的數字;
re.search(r"\d+$","123\n456\n789",re.M)
re.findall(r"\d+$","abc123\ncde456\ndef789",re.M)