python 正则
import re
1. 正则的常用方法
(1)匹配
re.match(pattern,string,flags=0)
pattern:正则表达式
string:要匹配的字符串
flags:标志(是否区分大小写、是否多行匹配等)
re.l 大小写不敏感 re.L re.M 多行匹配,影响 ^ $ re.S . 会匹配包括换行在内的所有字符 re.U 根据Unicode字符集解析字符,会影响 \w \W \b \B re.X
match返回的匹配对象的方法:
group(num=0) #0表示整个分组,或者返回第num个分组所匹配的字符串 groups() #返回一个含分组字符串的元组
(2)查找
re.search(regex,str)
(3)替换
re.sub(pattern,repl,string,count=0,flags=0)
repl:用来替换string中匹配项的字符串,也可为一个函数
count:替换的次数
(4)findall
search() 只会返回一个Match对象,其包含查找字符串第一次匹配的文本;如果要获取字符串中所有匹配的文本,用findall(),其返回一个包含所有匹配结果字符串的列表
2. 正则对象
为了使一个正则可重复使用,通过compile方法得到一个正则对象
re1 = re.compile(patteern.flags)
re1.match('xxxxx')
flags参数:
re.DOTALL .* 将匹配包括换行符的所有字符,无此参数就不匹配换行符
re.I 或 re.IGNORECASE 匹配时忽略大小写
re.VERBOSE 忽略中间有注释的表达式的注释
match返回一个Match对象,常用方法如下:
group(num=0) start(num=0) #分组匹配的子串在整个字符串中的起始位置 end(num=0) #分组匹配的子串在整个字符串中的结束位置(子串最后一个字符的索引加1) span(num) #返回 (start(num),end(num))
3. 模式
(1)括号分组
正则表达式中,一个括号对应一个分组,可通过 group() 入参指定取哪个分组
group(0)、group() 返回整个匹配的文本
groups() 返回所有分组的元组
import re regStr = r'(\d{3})(-\d{4})(-\d{4})' regObj = re.compile(regStr) str = 'asdas123-4567-9990asdafa5' match = regObj.search(str) print(match.group()) #123-4567-9990 print(match.group(0)) #123 print(match.group(1)) #123 print(match.group(2)) #-4567 print(match.group(3)) #-9990 print(match.groups()) #('123','-4567','-9990')
(2)
| 表示或
? 0次或1次
* 0次或多次
+ 至少一次
(3)贪心和非贪心匹配
默认贪心匹配
例: G{3,5} 表示匹配字符'G' 3到5次,默认尽可能多的匹配
greedyMatch = re.compile(r'(G){3,6}') match = greedyMatch.search('1GGGGGG2') print(match.group()) #GGGGGG noneGreedyMatch = re.compile(r'(G){3,6}?') match = noneGreedyMatch.search('1GGGGGG2') print(match.group()) #GGG
4. 字符分类
\d 同 [0-9]
\D 同 [^0-9]
\w 同 [a-zA-Z0-9_]
\W 同 [^a-zA-Z0-9_]
\s 空格、制表符、换行符(空白字符)
\S 除空格、制表符、换行符之外的任何字符