day17-正则表达式
一、正则符号
1.什么是正则
正则是字符串匹配的一种工具,拥有自己的语法。语法中主要包含各种符号的使用
2.正则语法
re.fullmatch(正则表达式,字符串)
—— 检测字符串是否完全符合正则表达式的规则(完全匹配)
匹配成功返回匹配对象,匹配失败返回None
正则表达式 —— python中的正则表达式是写在引号中(可以是单引号也可以是双引号),但一般情况下会在前面加r; r'正则表达式'
(1)普通字符
除了正则中有特殊功能和特殊意义以外的其他所有字符;普通字符在正则中表示字符本生。例如:a,b,c,1,2,3
(2)匹配任意字符 .
正则中出现 .
的位置可以匹配任意字符,一个.
只能匹配一个字符
(3)匹配字母、数字或者下划线(只针对ASCII码有效) \w
一个 \w
只能匹配一个字符;
注意:Unicode码中除了ASCII表以外的其他字符都能匹配
(4)匹配一个空白字符 \s
空白:空格、回车/换行、制表符
(5)匹配一个数字字符 \d
(6)匹配非\小写字母匹配到的内容
\W
—— 匹配非字母、数字、下划线
\S
—— 匹配非空白字符
\D
—— 匹配非数字字符
(7)匹配字符集 []
a.普通用法
- [字符集] —— 匹配字符集中的任意一个字符
b.表示范围的字符集
- [字符1-字符2] —— 从字符1到字符2的任意一个字符;注意:字符2的编码值必须大于字符1
c.反向选中
- [^字符集] —— 选中除了字符集中以外的任意一个字符
检测字符
一个匹配符号必须对应一个具体的字符;检测符号只是对符号所在的位置进行检测,不会影响字符串的长度
-
\b
—— 检测是否是单词边界- 单词边界:一切可以将两个单词区分开的符号都是单词边界,例如:单词开头,单词结尾,空白,标点符号等。
-
^
—— 检测^
所在的位置是否是字符串开头 -
$
—— 检测$
所在的位置是否是字符串结尾
二、正则符号2
1.匹配次数
-
*
—— 匹配0次或多次; 字符* —— *前的字符出现0次或者多次 -
+
—— 匹配一次或多次; -
?
—— 匹配0次或1次 -
{N}
—— 匹配N次;{M,N}
—— 匹配M到N次;{M,}
—— 至少匹配M次;{,N}
—— 最多匹配N次
2.贪婪和非贪婪
*
+
?
{}
对应的匹配次数是贪婪的; 在匹配次数不确定的时候才有贪婪和非贪婪的区分
在匹配次数不确定的符号后面加?
,就可以变成非贪婪: *?
+?
??
{}?
- 贪婪:在匹配成功的前提下,尽可能多的进行匹配
- 非贪婪:在匹配成功的前提下,尽可能少的进行匹配
3.分之
- 正则表达式1|正则表达式2
4.分组 —— ()
- 分组 —— 将正则中的一部分看成一个整体进行操作
- 重复 —— 添加分组后,可以分组的后面通过\M来重复前面M个分组匹配到的结果
5.转义符号
在正则符号前面加\
,让符号的功能消失
正则中的转义字符和字符串的转义字符是两回事
独立的特殊符号放在[]中特殊意义会消失,但是-,[]...
三、re模块
1.创建正则对象
re.compile(正则表达式)
—— 根据正则表达式创建正则对象
2.匹配
fullmatch(正则表达式,字符串)
—— 让整个字符串和正则表达式进行匹配
match(正则表达式,字符串)
—— 匹配字符串开头
返回值:匹配成功是匹配结果对象,失败是None
1)匹配结果对应的字符串
匹配对象.group()
—— 获取整个正则匹配到的结果
匹配对象.group(N)
—— 获取第N个分组匹配到的结果
2)匹配位置
匹配对象.span(group(0))
匹配对象.start(group(0))
匹配对象.end(group(0))
3)获取原字符串
匹配对象.string
3.查找
search(正则表达式,字符串)
—— 匹配出字符串中第一个满足正则表达式的子串,结果是匹配对象
findall(正则表达式,字符串)
—— 获取字符串中满足正则表达式的的所有子串;结果是列表,列表中的元素是字符串。
finditer(正则表达式,字符串)
—— 获取字符串中满足正则表达式的所有子串;结果是迭代器,迭代器的元素是匹配对象。
4.切割
split(正则表达式,字符串)
—— 按照满足正则表达式的子串对字符串进行切割,返回列表
5.替换
sub(正则表达式,字符串1,字符串2,替换次数=0)
—— 将字符串2中满足正则表达式的子串替换成字符串1替换次数为0的时候全部替换