Day17 正则表达式
一.正则表达式
1.什么是正则表达式
正则表达式是处理字符串的工具, 通过不同的正则符号来描述字符串的规则
2.正则符号(正则表达式的语法)
匹配符号 | 意义 |
---|---|
普通字符 | 代表字符本身 |
. | 匹配任意一个字符, 一个点只能匹配一个字符 |
\w | 匹配一个数字, 字母或者_(在ASCII码表中),一个\w只能匹配一个字符 |
\d | 匹配任意一个数字字符 |
s | 匹配任意一个空白字符, 空白字符包括: 空格字符, 换行字符, 制表符 |
\D | 匹配除了数字字符以外的任意字符(匹配一个非数字字符) |
\S | 匹配一个非空白字符 |
[字符集] | 匹配字符集中出现的任意一个字符 |
[^字符集] | 匹配不在字符集中的任意一个字符 |
普通字符:除了在正则中有特殊功能和特殊意义的符号以外的符号以外的字符都算普通字符
检测符号 | 意义 |
---|---|
\b | 检查是否是单词边界 |
^ | 检查^所在的位置是不是字符串开头 |
$ | 检查$所在的位置是否是字符串结尾 |
单词边界 - 能够将两个单词隔开并且不会产生歧义的任意符号: 空白字符, 标点符号, 字符串开头和字符串结尾
匹配规则: 先去掉\b对字符串进行匹配, 如果匹配成功再检查\b所在的位置是否是单词边界
匹配次数 | 意义 |
---|---|
* | 匹配0次或者多次 |
+ | 匹配1次或者多次 |
? | 匹配0次或者1次 |
{N} | 匹配N次 |
{M,} | 至少匹配M次 |
{,N} | 至少匹配N次 |
{M,N} | 至少匹配M次,至多匹配N次 |
3.贪婪和非贪婪匹配
在匹配次数不确定的时候, 会出现贪婪和非贪婪两种情况; 默认情况都是贪婪的
什么是贪婪: 在能够匹配成功的前提下, 匹配次数尽可能多
什么是非贪婪: 在能够匹配成功的前提下, 匹配次数尽可能少; (在匹配次数后面加?)
3.1分支 |
正则1|正则2 - 先让正则1去匹配, 如果匹配成功就成功; 匹配失败再让正则2去匹配(正则1和正则2中只要有一个能匹配成功就行)
3.2分组 ()
1)整体操作
r'(\d{2}|[A-Z]{2})abc' - 匹配一个字符串后面是abc, 前面是两个数字或者两个大写字母
r'([A-Z]\d){3}' - a2a2a2
2)分组
a.分组截取: 方便后面分段或者分情况取不同的匹配结果
b.分组重复: 在正则中用\X来重复前面第X个分组匹配到的内容
注意: \X的前面必须有这个分组
3.3转义字符 \
1) \
在正则中有特殊功能和特殊意义的符号前加, 让这个符号的特殊功能和意义消失
2) []
在[]中有特殊意义的符号: a. ^放在开头, b. -放在两个字符之间
其他符号包括: ., +, ?, *, $ 这些单独的符号在[]中都表示符号本身
二.re模块
re模块是python提供的, 专门针对正则表达式应用的相关函数
1.compile(正则表达式)
将正则表达式转换成正则对象
2.字符串匹配
fullmatch(正则表达式, 字符串) - 让正则表达式和字符串完全匹配
match(正则表达式, 字符串) - 匹配字符串开头
以上两个方法的结果: 匹配失败结果是None, 匹配成功会返回匹配对象
1)匹配对象
a.获取匹配到的字符串
匹配对象.group() - 获取整个正则表达式匹配到的字符串, 结果是字符串
匹配对象.group(N) - 获取整个正则表达式中第N个分组匹配到的字符串
b.获取匹配到的字符串在原字符串的位置信息
匹配对象.span() -> 返回匹配结果在原字符串中的下标范围: [开始下标, 结束下标)
匹配对象.span(N) -> 返回第N个分组匹配的结果在原字符串中的范围
c.获取原字符串
匹配对象.string
3.查找
1)search(正则表达式, 字符串)
在字符串中查找第一个满足正则表达式的子串, 如果找到了结果是匹配对象, 找不到结果是None
2)findall(正则表达式, 字符串)
获取字符串中所有满足正则表达式的子串; 返回值是一个列表
注意: 如果正则表达式中有分组, 列表中的匹配结果只会取分组匹配到的内容
4.切割
split(正则表达式, 字符串)
将字符串中满足正则表达式的字串作为切割点对字符串进行切割; 返回一个字符串列表
5.替换
sub(正则表达式, 字符串1, 字符串2)
将字符串2中所有满足正则表达式的字串都替换成字符串1