正则表达式
一、正则表达式规则
1.单字符匹配规则
- 字符 . 匹配任意1个字符(除了\n)
- 字符 [] 匹配[]中列举的字符
- 字符 \d 匹配数字,也就是0-9
- 字符 \D 匹配非数字,也就是匹配不是数字的字符
- 字符 \s 匹配空白符,也就是空格\tab
- 字符 \S 匹配非空白符,\s取反
- 字符 \w 匹配单词字符,a-z,A-Z,0-9,_
- 字符 \W 匹配非单词字符,\w取反
2.表示数量的规则
- 字符 * 匹配前一个字符出现0次或者无限次,可有可无,可多可少
- 字符 + 匹配前一个字符出现1次或者无线次,直到出现一次
- 字符 ? 匹配前一个字符1次或者0次,要么有1次,要么没有
- 字符 {m} 匹配前一个字符出现m次
- 字符 {m,} 匹配前一个字符至少出现m次
- 字符 {m,n} 匹配前一个字符出现m到n次
3.表示边界
- 字符 ^ 匹配字符串开头
- 字符 $ 匹配字符串结尾
- 字符 \b 匹配一个单词的边界
- 字符 \B 匹配非单词边界
4.匹配分组
- 字符 | 匹配左右任意一个表达式
- 字符 (ab) 将括号中字符作为一个分组
- 字符 \num 引用分组num匹配到的字符串
- 字符 (?P<name>) 分组起别名
- 字符 (?P=name) 引用别名为name分组匹配到的字符串
5.可选标志
- 字符 re.I 忽略大小写
- 字符 re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
- 字符 re.M 多行模式
- 字符 re.S 即为' . '并且包括换行符在内的任意字符(' . '不包括换行符)
- 字符 re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库
- 字符 re.X 为了增加可读性,忽略空格和' # '后面的注释
二、正则表达式的用法
1.字符串搜索
%主要方法
- match方法
描述:从左往右依次匹配,不满足则退出并返回None,匹配成功则返回一个匹配对象
格式:re.match(pattern,str,flags=0) - search方法
描述:全局搜索,只要有就返回,不再继续往下寻找
格式:re.search(pattern,str,flags=0) - findall方法
描述:获取所有匹配的查找
格式:re.findall(pattern,str)
%区别
match只匹配字符串的开始,如果字符串开始不符合正则表达式则匹配失败,返回None;
search匹配整个字符串,直到找到一个匹配。
2.字符串替换
- sub方法
描述:将匹配到的数据进行替换
格式:re.sub(pattern,replace,str,count=0,flags=0)
参数:count替换的最大次数,默认0代表替换所有匹配;flags编译时用的匹配模式
特征:replace可以是字符串或者一个函数
#当replace为字符串时直接对查找到的字符串进行替换
#当replace为函数时,则将查找到的字符串作为参数传入函数中,并将函数的返回的字符串替换到原字符串中
3.字符串切割
- split()方法
描述:按照能够匹配的子串将字符串分割后返回列表 - 格式:re.split(pattern,str[,maxsplit,flags=0])
- 参数:maxsplit分隔次数;flags标志位,用于控制正则表达式的匹配方式(修饰符-可选标志)
4.字符串获取
- group()方法
内容:匹配整个表达式的字符串,group()可以一次输入多个组号,在这种情况下它将返回一个包含那些组对应值的元组 - groups()方法
内容:返回一个包含所有小组字符串的元组,从1到所含的小组号
三、其他注意点
1.正则表达式的贪婪与非贪婪模式
- 含义:贪婪模式是指前面字符串尽可能多的匹配
- 转换:用 ? 将贪婪模式转换为非贪婪模式
2.原始字符串raw
- 来源:转义字符 \ 会造成在字符串匹配时需要转义为 \\
- 解决:在字符串前面加上 r ,就不需要考虑字符串转义的问题
3.原生字符串
- 内容:python中""" """可以定义一个原生字符串
- 含义:不管该字符串中有双引号单引号都会保留,不需要转义等特殊处理

浙公网安备 33010602011771号