re模塊的功能介紹
1. 方法
-
match
從開頭開始查找
方法:re.match(pattern,string,flags=0) 返回值:<class '_sre.SRE_Match'>(找到) or None(沒找到) 例如:m = re.match('e','excel') print(m.group()) >>> 'e' #該方法只能從開頭開始查,如果查找的內容不是開頭或者不存在時,返回值為None,驗證時調用group方法時將報錯,如果找到了,也只有一個,驗證時可以使用group方法進行獲取查找的內容。
-
search
全文搜索,只獲取第一個
方法:re.search(pattern,string,flags=0) 返回值:<class '_sre.SRE_Match'>(找到) or None(沒找到) 例如:s = re.search('ba','adbadfsbadsf') print(s.group()) >>> 'ba' #該方法與上述方法類似,不過該方法查找的范圍是全部內容,但返回只返回查找到的第一個,驗證方法同上。
-
findall
返回找到的所有內容(全文搜索)
方法:re.findall(pattern,string,flags=0) 返回值:list 例如:print(re.findall('s','afadsfdsf')) >>> ['s','s'] #該方法不需要通過group方法進行驗證,找不到時返回一個空列表。
-
split
搜索全文並進行切片
方法:re.split(pattern,string,maxsplit=0,flags=0) 返回值:list 例如:print(re.split('ax','sdaxfsfsaxdfsax')) >>> ['sd', 'fsfs', 'dfs', ''] #指定內容作為分割字符串的點進行切片,如果指定內容開頭或者結果則結果為列表中的一個空字符串,同時也可以指定切片的最大次數。
-
sub
替換
方法:re.sub(pattern,repl,string,count=0,flags=0) 返回值:str 例如:print(re.sub('a','23','sdfafasdf')) >>> 'sdf23f23sdf' #該方法默認全文替換,可以指定替換次數,如果查找的內容不存在時,將返回原字符串。
-
fullmatch
完全匹配搜索
方法:re.fullmatch(pattern,string,flags=0) 返回值:<class '_sre.SRE_Match'>(找到) or None(沒找到) 例如:fm = re.fullmatch('sa','sa') print(fm.group()) >>> 'sa' #該方法與match類似,只不過,該方法搜索的匹配內容必須和搜索的原文一樣,否則都認為是未找到。
-
subn
替換並返回元祖
方法:re.subn(pattern,repl,string,count=0,flags=0) 返回值:tuple 例如:print(re.subn('as','3','sfsasa,sdf')) >>> ('sfs3a,sdf', 1) #該方法把替換后的字符串作為元祖的第一個元素,第二個元素為替換的次數,如果未替換,則次數為0
-
finditer
查找所有並把返回值生成一個迭代器
方法:re.finditer(pattern,string,flags=0) 返回值:<class 'callable_iterator'> 例如:f_iter = re.finditer('a','adsfasfa') find_l = [i.group() for i in f_iter] print(find_l) >>> ['a', 'a', 'a'] #利用列表推導式把獲取到的結果作為列表進行返回。
2. 表達式符號
-
常用符號如下:
符號 表示 1. '.' 默認匹配除\n之外的任意一個字符,包括字母、數字、中文、特殊字符等,若flags指定為S(DOTALL),則匹配任意字符,包括換行符。 2. '^' 默認匹配字符開頭,若flags指定為M(MULTILINE),可以匹配多行中的開頭(如:'^a','\nabd\nsaf')。 3. '$' 默認匹配字符結尾,若flags指定為M(MULTILINE),可以匹配多行中的結尾(如:'$ab','asdfab\ndsa\n')。 4. '*' 匹配字符0次或多次 5. '+' 匹配字符1次或多次 6. '?' 匹配字符0次或1次 7. '{m}' 匹配字符m次 8. '{n,m}' 匹配字符n次到m次 9. '|' 匹配字符二選一 10. '(...)' 分組匹配 11. '\A' 匹配字符開頭,與'^'一樣 12. '\Z' 匹配字符結尾,與'$'一樣 13. '\d' 匹配數字[0,9] 14. '\D' 匹配非數字 15. '\w' 匹配字母、數字、中文,除特殊字符 16. '\W' 匹配特殊字符,包括\n 17. '\s' 匹配空白字符(即' ')、\t、\n、\r 18. '(?P<name>)' 分組匹配加命名
第18個表達式符號'(?P)'的實例如下:
s = re.search("(?P<province>\d{2})(?P<city>\d{2})(?P<county>\d{2})(?P<year>\d{4})","371481199306143242") print(s.groupdict()) {'year': '1993', 'city': '14', 'province': '37', 'county': '81'} print(s.group()) 3714811993 print(s.groups()) ('37', '14', '81', '1993') #該表達式得到的返回值也是<class '_sre.SRE_Match'>這個類。通過驗證的方法也比較多,驗證獲得的返回值分別為字典、字符串和元祖類型。
-
flags常用的幾種關鍵字參數
1. re.I(re.IGNORECASE):忽略大小寫 2. re.M(re.MULTILINE):多行模式,對'^'和'$'有所改變 3. S(DOTALL):包含\n的匹配模式,主要用於'.'的匹配規則 #括號內為完整輸入,前面是簡寫。
flags關鍵字參數的實例如下:
-
re.I
str1 = '\nad23好*sd\n阿道夫dsaf\nsSD' f_i = re.findall('s',str1,flags=re.I) print(f_i) ['s', 's', 's', 'S'] #如果flags為默認值(即flags=0),則該返回值中不會有'S'該元素。
-
re.M
str1 = '\nad23好*sd\n阿道夫dsaf\nsSD' f_start = re.findall('^s',str1,flags=re.M) print(f_start) ['s'] f_stop = re.findall('f',str1,flags=re.M) print(f_stop) ['f'] #如果flags為默認值(即flags=0),則該返回值應為空列表。
-
re.S
str1 = '\nad23好*sd\n阿道夫dsaf\nsSD' s_any = re.search('.',str1,flags=re.S) print(s_any.group()) #該打印的結果是空,由於驗證時未報錯,說明是有匹配到'\n'換行符,如果flags為默認值(即flags=0),則上述驗證將報錯。
-