python高级之正则表达式详解
1:什么是正则表达式
正则表达式,正则匹配式、表示式,使用一些特殊符号来匹配、查找、替换字符串文本的一种技术。
2:正则表达式的好处:
在软件开发过程中,经常会涉及到大量的关键字等各种字符串的操作,使用正则表达式能很大程度的简化开发的复杂度和开发的效率,所以在 Python 中正则表达式在字符串的查
询匹配操作中占据很重要的地位
正则表达式能很大程度的简化开发的复杂度和开发的效率
3:python为了方便使用正则表达式,专门提供了re模块
re.match()方法匹配的是以 xxx 开头的字符串
将结果保存到res中
使用 res.group()提取匹配结果,如果是,则返回匹配对象(Match Object),否则抛出错误
re.search:执行正则表达式搜索并且在搜索结束后返回所匹配到的串,只返回第一次匹配到的结果
re.findall:匹配所有的对象,并将匹配到的直接以一个列表的形式返回
re.sub: 实现查找替换
re.split:分割字符串,结果返回列表
re.finditer:返回一个迭代器 iterator,这个 iterator yield match objects.返回顺序、内容和 re.findall()相同
4:元字符:
==. ==# 匹配任意符号(除换行符外(\n))
\d # 匹配数字 digest
\w # 匹配所有的有效(大小写字母、数字、下划线_、各国语言符号)
\s # 匹配空白位 (如:空格、\t)
^ # 以xx开头
其中.代表匹配除\n外任意符号,*代表匹配任意位,a.*代表a后面可以有任意符号任意多少位,也可以没有
$ # 以xxx结尾
下图中示例1表示匹配以2开头,中间为任意数字,以9结尾的字符串
实例3表示匹配以任意有效字符,以9结尾的字符串
[] # 列举 # [0123456789] <==> \d
匹配以[]中任意一位开头的字符串
5、 反义符
\D # 匹配非数字
\W # 匹配特殊符号
\S # 匹配非空白位
[^] # 列举反义 注意[]和[]的区别,表示不以【】内任意字符开始
6、转义符
在python的字符串中\是具有特殊含义的,要正常表示一个\,需要两个\来表示在正则中,\是具有特殊含义的,要正常表示一个\,需要两个\来表示,必须使用\来取消这些字符的特殊意义。
注意以下情况:
\不仅充当了正则转义,同时也充当了字符串的角色,字符串也需要转义一次,所以需要4个
或者在正则表达式前面加上一个r,表示对匹配的字符串不进行转义
建议这样写
7、位数:
* # 表示匹配任意位(可以是0位、可以是1位、可以有n位)
+ # 匹配至少一位(至少是1位、可以有n位)数字
? # 0位或者1位
{n} # 有n位
以下案例表示:匹配以1开头的,第二位是【】内任意一位,长度为9的字符串,当长度不满9位,则返回【】,超过9位只取【】内的9位,注意是从0开始
{n,} # 至少n位,尽可能多取,注意是从【】内从0取
{n, m} # 表示n~m这个区间范围,注意是从【】内从0取
8、分组(group)
在正则表达式中,使用圆括号()将正则中包裹起来,会形成正则匹配后的二次筛选
分组最大的好处就是能够形成第二次筛选
匹配()里面的值,注意findall可以直接返回匹配到的值
r"</?.*?>" # 匹配HTML标签
注意:分组还可以解决正则中html语法里前后匹配问题,html中才正确,但以下可见前后不一样也可以匹配
因此使用分组来进行限制:
其中的<\1>表示匹配前面<(\w+)>中第一个括号中的字母
9、贪婪模式和非贪婪(懒惰)模式
在 Python 中正则默认是贪婪模式(个别语言中也可能是非贪婪模式),贪婪模式就是总会尝试匹配更多的字符。
非贪婪模式则反之,总是尝试匹配尽可能少的字符。
在、?、+、{m,n}后面加上?,可以将贪婪模式变成非贪婪模式。*