正則就是用一些具備特殊含義的符號組合到一塊兒(稱爲正則表達式)來描述字符或者字符串的方法。或者說:正則就是用來描述一類事物的規則。(在Python中)它內嵌在Python中,並經過 re 模塊實現。正則表達式模式被編譯成一系列的字節碼,而後由用 C 編寫的匹配引擎執行。python
1 [1] 匹配1 2 [123] 匹配一、二、3 3 [0-9] 匹配任意一個數字 4 [a-z] 匹配任意一個小寫字母 5 [A-Z] 匹配任意一個大寫字母 6 [A-Za-z] 匹配任意一個字母
示例以下:正則表達式
1 print(re.findall('[1]','Zll5201314')) #['1', '1'] 2 print(re.findall('[123]','Zll5201314')) #['2', '1', '3', '1'] 3 print(re.findall('[0-9]','Zll5201314')) #['5', '2', '0', '1', '3', '1', '4'] 4 print(re.findall('[a-z]','Zll5201314')) #['l', 'l'] 5 print(re.findall('[A-Z]','Zll5201314')) #['Z'] 6 print(re.findall('[a-zA-Z]','Zll5201314')) #['Z', 'l', 'l'] 7 print(re.findall('[A-Za-z0-3]','Zll5201314')) #['Z', 'l', 'l', '2', '0', '1', '3', '1']
1 . 匹配除換行符之外的任意字符 2 \w 匹配字母或者數字或者下劃線 3 \s 匹配任意空白字符 4 \d 匹配數字 5 \n 匹配換行符 6 \t 匹配製表符tab 7 \b 匹配一個單詞的結尾 8 ^ 匹配字符串的開始 9 $ 匹配字符串的結尾 10 \W 匹配非字母或下劃線或數字 11 \D 匹配非數字 12 \S 匹配非空白符 13 | 匹配|前或者後的內容 14 () 匹配括號內的表達式,也表示一個組
示例以下:測試
1 print(re.findall('.','love_u 520')) #['l', 'o', 'v', 'e', '_', 'u', ' ', '5', '2', '0'] 2 print(re.findall('\w','love_u 520')) #['l', 'o', 'v', 'e', '_', 'u', '5', '2', '0'] 3 print(re.findall('\s','love_u 520')) #[' '] 4 print(re.findall('\d','love_u 520')) #['5', '2', '0'] 5 print(re.findall('\n','love_u 520')) #[] 6 print(re.findall('\b','love_u 520')) #[] 7 print(re.findall('^l','love_u 520')) #['l'] 8 print(re.findall('520$','love_u 520'))#['520'] 9 print(re.findall('\W','love_u 520')) #[' '] 10 print(re.findall('\D','love_u 520')) #['l', 'o', 'v', 'e', '_', 'u', ' '] 11 print(re.findall('\S','love_u 520')) #['l', 'o', 'v', 'e', '_', 'u', '5', '2', '0'] 12 print(re.findall('love|u','love_u 520')) #['love', 'u']
1 * 重複零次或者屢次 2 + 重複1次或者屢次 3 ? 重複零次或者一次 4 {n} 重複n次 5 {n,} 重複n次或者更屢次 6 {n,m} 重複n到m次
示例以下:spa
1 print(re.findall('5*','555 5')) #['555', '', '5', ''] 2 print(re.findall('5+','555 5')) #['555', '5'] 3 print(re.findall('5?','555 5')) #['5', '5', '5', '', '5', ''] 4 print(re.findall('5{2,3}','555 5')) #['555'] 5 print(re.findall('5{2}','555 5')) #['55'] 6 print(re.findall('5{3}','555 5')) #['555']
1 手機號(國內):^[1-9][3478]\d{9} 2 電話號(國內):[0-9-()()]{7,18} 3 郵編:\d{6} 4 QQ:[1-9]([0-9]{5,11}) 5 身份證號:\d{17}[\d|x]|\d{15} 6 郵箱:\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14} 7 網址:^((https|http|ftp|rtsp|mms)?:\/\/)[^\s]+ 8 日期:\d{4}(\-|\/|.)\d{1,2}\1\d{1,2} 9 用戶名:[A-Za-z0-9_\-\u4e00-\u9fa5]+
#正則表達式在線測試網址「http://tool.chinaz.com/regex/」
findall()方法:code
此方法是在整個字符串中匹配指定字符或者字符串,而且將全部知足條件的結果返回到一個列表中,以下:對象
1 ret = re.findall('a','abac') 2 print(ret) #['a', 'a']
3 ret = re.findall('ab','abac') 4 print(ret) #['ab']
search()方法:blog
此方法是在整個字符串中查找知足匹配條件的字符或者字符串,一旦找到一個就再也不繼續查找,並返回包含查找值的對象,能夠用.group()方法進行查看,以下:字符串
1 ret = re.search('a','abac') 2 print(ret.group()) #a
match()方法:it
此方法是用來從開頭位置查找是否知足匹配條件,若是沒有就會返回None,若是有,則會返回一個包含查找值的對象,能夠用group()方法進行查看,以下:編譯
1 ret = re.match('a','abac') 2 print(ret.group()) #a 3 4 ret = re.match('b','abac') 5 print(ret) #None
split()方法:
此方法用來對一個字符串進行切分,以下:
1 ret = re.split('[ab]', 'abcd') # 先按'a'分割獲得''和'bcd',在對''和'bcd'分別按'b'分割 2 print(ret) # ['', '', 'cd']
sub()以及subn()方法:
1 ret = re.sub('\d', '*', 'a1b2c3')#將數字替換成'*',默認替換全部的數字 2 print(ret) #a*b*c* 3 4 ret = re.sub('\d', '*', 'a1b2c3', 1)#將數字替換成'*',參數1表示只替換1個 5 print(ret) #a*b2c3 6 7 ret = re.subn('\d', '*', 'a1b2c3')#將數字替換成'*',返回一個元祖(替換後的字符串,替換的次數) 8 print(ret) #('a*b*c*', 3)
compile()方法:
此方法是先把正則表達式編譯好,以方便屢次使用,以下:
1 obj = re.compile('\d{3}') #將正則表達式編譯成爲一個 正則表達式對象,規則要匹配的是3個數字 2 ret = obj.search('abc123eeee') #正則表達式對象調用search,參數爲待匹配的字符串 3 print(ret.group()) #結果 : 123
finditer()方法:
此方法與findall相似,只不過返回的不是一個列表,而是一個生產器,能夠用next(iter).group()來查看裏面的值,以下:
1 ret = re.finditer('\d', 'ds3sy4784a') #finditer返回一個存放匹配結果的迭代器 2 print(ret) # <callable_iterator object at 0x10195f940> 3 print(next(ret).group()) #查看第一個結果 4 print(next(ret).group()) #查看第二個結果 5 print([i.group() for i in ret]) #查看剩餘的左右結果