正則表示式2
阿新 • • 發佈:2021-09-15
7個普通元字元
首先介紹的是7個 普通元字元,詳細介紹如下圖,它們在正則表示式中,都有著自己特殊的含義。
1 [ ]符號
案例如下:
importre
str1="acbazbabba6baab"
result1=re.findall("a[a-z]b",str1)①
result2=re.findall("a[0-9]b",str1)②
result3=re.findall("a[za6]b",str1)③
print(result1)
print(result2)
print(result3)
結果如下:程式碼解釋:不管是①②③,表示匹配開頭是a,末尾是b。唯一不同的就是[ ]符號中匹配值不同。
- ①處表示中間的字元,只要是a-z字母中任何一個,都可以被匹配到。
- ②處表示中間的字元,只要是0-9數字中任何一個,都可以被匹配到。
- ③處表示中間的字元,只能是z或a或6這三者中任何一個,才能被匹配到。
2 |或運算子
案例如下:
importre
str2="我是孫悟空,您可以稱呼我為齊天大聖!"
result1=re.findall("孫悟空|齊天大聖",str2)
print(result1)
結果如下:程式碼解釋:要麼匹配孫悟空,要麼匹配齊天大聖。
3 \轉義字元
案例如下:
importre
str3="\n123456"①
str4="\\n123456"②
str5=r"\n123456"③
result3=re.findall("n",str3)
result4=re.findall("n",str4)
result5=re.findall("n",str5)
print(result3)
print(result4)
print(result5)
結果如下:程式碼解釋:觀察①②③處的區別,我們分別注意\的個數和r的用法。
- ①處一個轉義字元 + 字母n,是一個特殊整體\n,用於表示換行符,因此匹配不到n這個字母。
- ②處兩個轉義字元 + 字母n,其中\n是一個特殊整體,再加上一個轉義符號\,就將其變為一個普通字母n,因此匹配到了n。
- ③處其實和②的含義一樣,也可以將特殊整體\n,變為一個普通字母n,因此同樣可以匹配到n。
4 ^和$符號
案例如下:
importre
str6="你來自哪裡?我來自湖北省"
result7=re.findall("^你",str6)
result8=re.findall("^來",str6)
result9=re.findall("省$",str6)
result10=re.findall("湖北$",str6)
print(result7)
print(result8)
print(result9)
print(result10)
結果如下:程式碼解釋:一個用於匹配開頭,一個用於匹配結尾。只有開頭或結尾,與你要匹配的值一致,才能被匹配到。
5 .*?符號
案例如下:
importre
str6="abcdaabb"
result10=re.findall("a.b",str7)①
result11=re.findall("a*b",str7)②
result12=re.findall("a?b",str7)③
result13=re.findall("a.*b",str7)④
result14=re.findall("a.*?b",str7)⑤
print(result10)
print(result11)
print(result12)
print(result13)
print(result14)
結果如下:程式碼解釋:點號一般與*號和?號搭配使用。仔細觀察①-⑤處的正則表示式,開頭和結尾都是a、b,唯一不同的就是它們之間的符號。
- ①處點號表示匹配(除了換行符)任意單個字元。因此,只要開頭是a,結尾是b,中間是任何一個單個字元,都會被匹配上。
- ②處*號表示匹配前面一個字元0或多次,在這裡 * 號前面是a。因此,只要結尾是b,前面是>=0個a的值,都會被匹配上。
- ③處?號表示匹配前面一個字元最多一次,在這裡 * 號前面是a。因此,前面是大一等於0、小於等於1個a的值,都會被匹配上。
- ④.*組合 ,稱為“貪婪匹配”,是因為它會匹配到儘可能多的內容。原本開頭是a,那麼只要找到b,就是一個返回值。但是貪婪匹配不這樣,他會一直朝後面走,直到找到最後一個b才肯罷休,然後返回一個超級長的字串。
- ⑤.*?組合 ,稱為“非貪婪匹配”,就是為了制止貪婪匹配而生的。他舅不貪得無厭,只要是開頭是a,你後面不是想要b嗎,我碰到第一個就給你返回了。
6 ( )符號
案例如下:
importre
str8="a321b木頭人c"
result15=re.findall("a(\d+)b([\u4e00-\u9fa5]+)c",str8)
print(result15)
結果如下:程式碼解釋:()表示一個組,只要是()中的內容,最後都會被返回。
6個特殊字元
接著介紹的是6個常用字母,它們與轉義符號搭配,有著自己獨特的含義;
1 \d與\D
案例如下:
importre
str1="123\n黃同學@#%嘻嘻\t"
result1=re.findall("\d",str1)
result2=re.findall("\D",str1)
print(result1)
print(result2)
結果如下:程式碼解釋:\d僅匹配數字,\D用於匹配非數字,很好理解。
2 \s與\S
案例如下:
importre
str2="\r123\n黃同學@#%嘻嘻\t"
result3=re.findall("\s",str2)
result4=re.findall("\S",str2)
print(result3)
print(result4)
結果如下:程式碼解釋:\s僅匹配空白字元,\S用於匹配非空白字元(這個更常用)。
3 \w與\W
案例如下:
importre
str3="\r123\n黃同學_@#%嘻嘻\t"
result5=re.findall("\w",str3)
result6=re.findall("\W",str3)
print(result5)
print(result6)
結果如下:程式碼解釋:\w相當於[A-Za-Z0-9_],超好用(值得注意),\W匹配非單詞字元,瞭解即可。