python基础之正则
1、正则基础
- 导入模块 import re
- 使用match方法进行匹配
- re.match 能过匹配出以xxx开头的字符串,如果起始位置没有匹配成功,返回None,匹配成功返回的是一个对象
- res=re,match(正则表达式,要匹配的字符串)
- group方法
- 若match匹配成功,可以使用group方法来提取数据 res.group()
- 匹配单个首字符
- . 匹配任意一个字符(除 \n)
- 匹配 [ ]中列出的字符
- \d 匹配数字0-9
- \D 匹配非数字
- \s 匹配空白即空格和 tab键
- \S 匹配非空白
- \w 匹配单词字符 即 a-z、 A-Z、0-9、汉字
- \W 匹配非单词字符
- 匹配多个字符(搭配单字符匹配使用):
- *匹配前一个字符出现0次或无限次,即可有可无
- (+) 匹配前一个字符出现1次或者无限次,即至少一次
- ?匹配前一个字符出现1次或0次,即 要么1次要么0次
- {m}匹配前一个字符出现m次
- {m,n}匹配前一个字符出现从m到n次
- 匹配开头和结尾
- ^匹配字符串开头,表示对什么取反(只有在[ ] 中才不匹配显示取反)
- $ 匹配字符串结尾
- 匹配分组
- | 匹配左右任意一个表达式
- (ab)将括号中的字符作为一个分组
- \num 引用分组num匹配到字符串
- (?P)分组起别名
- (?P=name)引用分组别名为name分组匹配到的字符串
- group(1) 可用分组取匹配到的字符串中的字符
- 高级用法
- search() 会扫描整个字符串并返回第一个成功的匹配。match() 从第一个匹配
- findall() 会以列表的形式返回匹配到的字符串
- sub() 将匹配的数据进行替换
- split() 根据匹配进行切割字符串,并返回一个结果
- 贪婪与非贪婪
- 贪婪:在满足匹配时,匹配尽可能多的字符,默认采用贪婪模式
- 非贪婪:在满足匹配时,匹配尽可能少的字符,使用? 来表示非贪婪匹配
- 原生字符串
- 在python中字符串前加 r 表示原生字符串
import re
#match
res=re.match('精','精忠报国')# 精
#匹配单个字符 . [] \d \D \s \S \w \W
res=re.match('..','精忠报国')# 精忠
res=re.match('[精忠]','精忠报国')# 精 从头开始匹配 匹配不上报错
res=re.match('\d','12344sdf')# 1
res=re.match('\D','精123忠报国')# 精
res=re.match('\s',' ')#
res=re.match('\S','精忠报国')# 精
res=re.match('\w*','精忠报国234yydS dfg')# 精忠报国234yydS
res=re.match('\W*','#忠¥报!国')# #
print(res.group())
#多字符匹配 * + ? {m} {m,n}
import re
res=re.match('.*','精忠报国yyds')# #精忠报国yyds
res=re.match('精忠+','精忠报国有精忠神')# 精忠
res=re.match('精?','sdfs')#
res=re.match('精忠报国{1,2}','精忠报国精忠报国')# 精忠报国
print(res.group())
import re
res=re.match('^yy','yydes')# yy
res=re.match('.{2}de$','yyde')# yyde {}中的字符位数加上末尾匹配字符等于被匹配字符串 否则报错
res=re.match('[ayd]*','dyds')# dyd
res=re.match('\s|.*','yyds1 df')# yyds1 df #匹配左右任意一个表达式,从左到右 两个都不满足则报错
res=re.match('\w*(qq|163|df).com','23425qq.com')# 23425qq.com
res=re.match('<\w*>\w*</\w*>','<html>python</html>')# <html>python</html>
res=re.match('<(\w*)>\w*</\\1>','<html>python</html>')# <html>python</html> \num
res=re.match(r'<(?P<p>\w*)>\w*</(?P=p)>','<html>python</html>')# <html>python</html> (?P<name>)
print(res.group())
#高级用法
import re
# res=re.search('忠','精忠报国')#从头开始查找
# print(res.group())# 忠
res=re.findall('yyd','精yy忠报国yyds')# ['yyd']
res=re.sub('yy','jj','yyds')# jjds
res=re.split(',','yyds,精忠报国,yyg')#['yyds', '精忠报国', 'yyg']
res=re.findall('y','ydydyd')# ['y', 'y', 'y']
res=re.findall('y*?','ydydyd')# ['', 'y', '', '', 'y', '', '', 'y', '', ''] findall() 匹配不成功会返回空值
res=re.match('yd*?','yddd')# y
print(res.group())
2.正则表达式的概念
正则表达式就是记录文本规则的代码
3.正则表达式的特点
- 正则表达式语法可读性很差
- 正则表达式通用性很强,能够适用于很多编程语言
- 文明其精神,野蛮其体魄