簡介python
正則表達式是對字符串(包括普通字符(例如,a 到 z 之間的字母)和特殊字符(稱爲「元字符」))操做的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個「規則字符串」,這個「規則字符串」用來表達對字符串的一種過濾邏輯。正則表達式是一種文本模式,該模式描述在搜索文本時要匹配的一個或多個字符串。正則表達式
做用編碼
給定一個正則表達式和另外一個字符串,咱們能夠達到以下的目的:spa
元字符 | 描述 |
\ | 轉義字符,例如:「\\n」匹配\n。「\n」匹配換行符。序列「\\」匹配「\」而「\(」則匹配「(」 |
^ | 匹配輸入行首 |
$ | 匹配輸入行尾 |
* | 匹配前面的子表達式任意次,例如:zo*能匹配「z」,也能匹配「zo」以及「zoo」,*等價於{0,} |
+ | 匹配前面的子表達式一次或屢次(大於等於1次),例如:「zo+」能匹配「zo」以及「zoo」,但不能匹配「z」,+等價於{1,} |
? | 匹配前面的子表達式零次或一次,例如:「do(es)?」能夠匹配「do」或「does」,?等價於{0,1} |
{n} | n是一個非負整數。匹配肯定的n次,例如:「o{2}」不能匹配「Bob」中的「o」,可是能匹配「food」中的兩個o |
{n,} | n是一個非負整數,至少匹配n次,例如:「o{2,}」不能匹配「Bob」中的「o」,但能匹配「foooood」中的全部o,「o{1,}」等價於「o+」,「o{0,}」則等價於「o*」 |
{n,m} | m和n均爲非負整數,其中n<=m。最少匹配n次且最多匹配m次,例如:「o{1,3}」將匹配「fooooood」中的前三個o爲一組,後三個o爲一組。「o{0,1}」等價於「o?」。請注意在逗號和兩個數之間不能有空格。 |
? | 當該字符緊跟在任何一個其餘限制符(*,+,?,{n},{n,},{n,m})後面時,匹配模式是非貪婪的,非貪婪模式儘量少地匹配所搜索的字符串,而默認的貪婪模式則儘量多地匹配所搜索的字符串,例如:對於字符串「oooo」,「o+」將盡量多地匹配「o」,獲得結果[「oooo」],而「o+?」將盡量少地匹配「o」,獲得結果 ['o', 'o', 'o', 'o'] |
.(點) | 匹配除「\n」和"\r"以外的任何單個字符 |
x|y | 匹配x或y,例如:「z|food」能匹配「z」或「food」(此處請謹慎),「[z|f]ood」則匹配「zood」或「food」 |
[xyz] | 字符集合,匹配所包含的任意一個字符,例如:「[abc]」能夠匹配「plain」中的「a」 |
[^xyz] | 負值字符集合,匹配未包含的任意字符,例如:「[^abc]」能夠匹配「plain」中的「plin」任一字符 |
[a-z] |
字符範圍,匹配指定範圍內的任意字符,例如:「[a-z]」能夠匹配「a」到「z」範圍內的任意小寫字母字符,
注意:只有連字符在字符組內部時,而且出如今兩個字符之間時,才能表示字符的範圍; 若是出字符組的開頭,則只能表示連字符自己
|
[^a-z] | 負值字符範圍,匹配任何不在指定範圍內的任意字符,例如:「[^a-z]」能夠匹配任何不在「a」到「z」範圍內的任意字符 |
( ) | 將( 和 ) 之間的表達式定義爲「組」(group),而且將匹配這個表達式的字符保存到一個臨時區域(一個正則表達式中最多能夠保存9個),它們能夠用 \1 到\9 的符號來引用 |
\d | 匹配一個數字字符,等價於[0-9] |
\D | 匹配一個非數字字符,等價於[^0-9] |
\t | 匹配一個製表符 |
\w | 匹配包括下劃線的任何單詞字符 |
\W | 匹配任何非單詞字符,等價於「[^A-Za-z0-9_]」 |
例1:驗證輸入用戶名和QQ號及郵箱是否有效並給出對應的提示信息code
import re def main(): username=input('請輸入你的用戶名:') m1=re.match(r'^[0-9a-zA-Z]{6,20}$',username) if not m1: print('你輸入的用戶名無效') qq = input('請輸入你的QQ號:') m2=re.match(r'^[1-9]\d{4,11}$',qq) if not m2: print('你輸入的qq號無效') email = input('請輸入你的郵箱:') m3=re.match('(\w+\.)*\w+@(\w+\.)+[a-zA-Z]+',email) if not m3: print('你輸入的郵箱無效') if m1 and m2 and m3: print('你輸入的信息有效') if __name__=='__main__': main()
例2:替換字符串中的不良內容blog
import re def main(): sentence = '你丫是傻叉嗎? 我操你大爺的. Fuck you.' purified = re.sub('[操肏艹]|fuck|shit|傻[比屄逼叉缺吊屌]|煞筆', '*', sentence, flags=re.IGNORECASE) print(purified) # 你丫是*嗎? 我*你大爺的. * you. if __name__ == '__main__': main()