正则表达式,可以动态模糊匹配,最重要的是组合使用
- 5个主要套路:
match():匹配第一个
search():搜索全文本进行匹配
findall():找到所有,不能使用group方法了
split(‘A’,‘B’):切片,使用A将B分开
res=re.split('[a-z]','123a4456b789')
print(res)#用a-z将字符串分开
sub(‘A’,‘B’,‘C’),替换,用B替换C中的A
res=re.sub('[0-9]+','|','abc12fds34kdf45fa',count=2)
print(res)
- 主要表达式:
2.1 :’.'默认匹配除了\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行\n
res = re.match('Y.+','WYF123')#'.+匹配所有了'
res = re.search('Y[A-Z]+N','WUYIFAN123')#search搜索整个文本,match从头开始匹配,输出’YIFAN‘
print(res.group())
2.2:
‘^’,匹配字符开头,若指定flags MULTILINE,这种也可以匹配上 (r’^a’,’\nabc\neee’,flags=re,MULTILINE)
‘$’,匹配字符结尾
*,匹配号前的字符0次或多次
+,匹配前一个字符1次或多次
?,匹配前面的字符1次或0次
res = re.search('N1?','WUYIFAN123')#匹配W一次或0次
print(res.group())
2.3 :’{m}'匹配前一个字符m次
res = re.search('[0-9]{3}','WUYIFAN123')#输出123
print(res.group())'''
2.4:’{n,m}'匹配前一个字符n到m次
res = re.findall('[0-9]{1,3}','WUY12IFAN123')#匹配W一次或0次
print(res)#不用group了
2.5:# ,’|'匹配|左或|右的字符
res = re.findall('WU|12','WUY12IFAN123')#匹配W一次或0次
print(res)#findall,没有group方法
res = re.search('(12){2}','WUY1212IFAN123')#匹配两次12,也就是匹配1212
print(res.group())#不用group了
res = re.search('(12){2}(||=){2}','WUY1212IFAN123||=||=')#匹配两次12,也就是匹配1212
print(res)#不用group了
2.6: ‘(…)’,分组匹配
‘\A’,只从字符开头匹配
‘\Z’,匹配字符结尾
res = re.search('\A[A-Z]+[0-9]\Z','WUYIFAN123')#匹配两次12,也就是匹配1212
print(res.group())#不用group了
2.7: ‘\d’,匹配数字0-9
‘\D’,匹配非数字
‘\w’,匹配[A-Z,a-z,0-9]
‘\W’,匹配非[A-Z,a-z,0-9]
‘s’,匹配空白字符,\t、\n、\r,
‘(?P…)’,分组匹配
res = re.search("((?P<name>[A-Z]+)(?P<id>[0-9]+))","UYIFAN123")#
print(res.groupdict())#输出{'name': 'UYIFAN', 'id': '123'}
2.8:re.I(re.IGNORECASE):忽略大小写
res=re.search('[a-z]+','ABCfdskdf',flags=re.I)
print(res.group())#输出ABCfdskdf
2.9:M(MUTILINE):多行模式,改变’^‘和’$'的行为
res=re.search(r'','\nABCfdskdf\ndaskl',flags=re.M)
print(res.group())
2.10: S(DOTALL):点任意匹配模式,改变’.'的行为
res=re.search(r'.+','\nABCfdskdf\ndaskl',flags=re.S)
print(res.group())#输出两行,以\n为换行符输出两行