Python:re模組(正則表示式)
阿新 • • 發佈:2018-11-25
#!/usr/bin/env python # coding:UTF-8 """ @version: python3.x @author:曹新健 @contact: [email protected] @software: PyCharm @file: re模組簡介.py @time: 2018/9/15 16:27 """ ''' re.match函式 原型:match(pattern,string,flags=0) 掃描整個字串,返回從起始位置成功的匹配 pattern:匹配的正則表示式 string:要匹配的字串 flags:標誌位,用於控制正則表示式的匹配方式,值如下: re.I 忽略大小寫(常用) re.L 做本地化識別 re.M 多行匹配,影響^和$ re.S 是.匹配包括換行符在內的所有字元(常用) re.U 根據Unicode字符集解析字元,影響\w \W \b \B re.X 使我們以更靈活的格式理解正則表示式 示例: import re res = re.match("www","www.baidu.com") res1 = re.match("www","wwW.baidu.com",flags=re.I) res2 = re.match("www","baidu.com.wwW",flags=re.I) print(res,res1,res2) #<_sre.SRE_Match object; span=(0, 3), match='www'> #<_sre.SRE_Match object; span=(0, 3), match='wwW'> #None ''' ''' re.search函式 原型:search(pattern,string,flags=0) pattern:匹配的正則表示式 string:要匹配的字串 flags:標誌位,用於控制正則表示式的匹配方式,值同match 功能:掃描整個字串,並返回第一個成功的匹配 示例: import re res = re.search("www","www.baidu.com") res1 = re.search("www","wwW.baidu.com",flags=re.I) res2 = re.search("www","baidu.com.wwW",flags=re.I) print(res,res1,res2) #<_sre.SRE_Match object; span=(0, 3), match='www'> #<_sre.SRE_Match object; span=(0, 3), match='wwW'> #<_sre.SRE_Match object; span=(10, 13), match='wwW'> ''' ''' re.findall函式 原型:findall(pattern,string,flags=0) pattern:匹配的正則表示式 string:要匹配的字串 flags:標誌位,用於控制正則表示式的匹配方式,值同match 功能:掃描整個字串,並返回結果列表 示例: import re res = re.findall("www","www.baidu.www,com") res1 = re.findall("www","wwW.baidu.com,www",flags=re.I) res2 = re.findall("www","baidu.www,com.wwW",flags=re.I) print(res,res1,res2) #['www', 'www'] #['wwW', 'www'] #['www', 'wwW'] ''' ''' 字串切割 str = "cxj is a good man" print(str.split(" ")) print(re.split(r" +",str)) ''' ''' re.finditer函式 原型:finditer(pattern,string,flags=0) pattern:匹配的正則表示式 string:要匹配的字串 flags:標誌位,用於控制正則表示式的匹配方式,值如下: re.I 忽略大小寫(常用) re.L 做本地化識別 re.M 多行匹配,影響^和$ re.S 是.匹配包括換行符在內的所有字元(常用) re.U 根據Unicode字符集解析字元,影響\w \W \b \B re.X 使我們以更靈活的格式理解正則表示式 功能:與findall類似,掃描整個字串,返回一個迭代器 str = "cxj is a good man!cxj is a nice man!" d = re.finditer(r"cxj",str) #print(d) for i in d: print(i) ''' ''' 字串的替換和修改 sub(pattern, repl, string, count=0, flags=0) subn(pattern, repl, string, count=0, flags=0) pattern:匹配的正則表示式 repl:制定的用來替換的字串 string:目標字串 count:最多替換次數 功能:在目標字串中以正則表示式的規則匹配字串,再把他們替換為制定的字串,可以 制定替換的次數,如果不指定,替換所有 str = "cxj is good good good man" str2 = re.sub(r"good","nice",str) str3 = re.subn(r"good","nice",str) print(str2) print(str3) cxj is nice nice nice man ('cxj is nice nice nice man', 3) 前者返回一個字串,後者返回一個元組,元組中包括被替換的次數 ''' ''' 分組 概念:除了簡單的判斷是否匹配之外,正則表示式還有提取子串的功能。用()表示的就是 要提取的分組 (?P<name>正則表示式)#name是一個合法的識別符號 ''' ''' 編譯:當我們使用正則表示式時,re模組會幹兩件事 1、編輯正則表示式,如果正則表示式本身不合法,會報錯 2、用編譯後的正則表示式去匹配物件 compile(pattern, flags=0) patern = r"1[3578]\d{8}|147\d{8}" re_tel = re.compile(patern) print(re_tel.findall("ee15022792490eew15122839030")) ''' import re res = re.findall("www","www.baidu.www,com") res1 = re.findall("www","wwW.baidu.com,www",flags=re.I) res2 = re.findall("www","baidu.www,com.wwW",flags=re.I) print(res,res1,res2)