正则表达式
在python里使用正则表达式,需要导入 re模块中的fullmatch
from re import fullmatch
使用方法:
fullmatch(正则表达式,字符串) - 判断正则表达式和字符串是否匹配,如果不能匹配返回None
普通字符
字符 | 含义 |
---|---|
. | 匹配一个任意字符 |
\w | 匹配任意一个数字、字母或者下划线(在ASCII码表中) |
\d | 匹配任意一个数字字符 |
\s | 匹配任意一个空白字符(’ ‘、’\n’、’\t’) |
\ (大写字母)(\W,\S,\D) | \大写字母的功能和\小写字母的功能相反 |
[字符集] | 匹配字符集中的任意一个字符 |
[^字符集] | 匹配任意一个不在字符集中的字符 |
注意:
a.一个[ ]只能匹配一个字符
b.[字符1-字符2]中两个字符之间的-表示范围:字符1到字符2,字符1的编码值必须小于字符2
[abc] - 匹配a或者b或者c
[a-z] - 匹配任意一个小写字母
[A-Z] - 匹配任意一个大写字母
[a-zA-Z] - 匹配任意一个字母
[0-9] - 匹配任意一个数字
[\u4e00-\u9fa5] - 匹配任意一个中文字符
c.[]中只有放在最前面的时候才有特殊意义,在其他位置的时候表示字符本身
d.[]中的-只有在两个字符之间的时候才会有特殊意义,否则也是表示字符-本身
匹配次数
符号 | 含义 |
---|---|
a* | a匹配0次或多次 |
+ | 匹配一次或多次 |
? | 匹配0次或1次 |
{} | 见下 |
其中:{}:
{N} - 匹配N次
{M,N} - 匹配M到N次
{M,} - 匹配至少M次
{,N} - 匹配最多N次
贪婪和非贪婪
贪婪:在能匹配成功的前提下,次数尽可能多的匹配(越多越好)。默认情况下都是贪婪
非贪婪:在能匹配成功的前提下,次数尽可能少的匹配(越少越好)。在不确定的匹配次数后加? - (*? +? ?? {m,n}? …)
fullmatch贪婪和非贪婪没有区别
search默认贪婪,非贪婪需加?
检测符号
注意:检测类的符号只做字符的检测不会进行匹配
\b ------ 检测是否是单词边界(单词边界就是任何可以区分出两个不同单词 的符号,比如:空白字符、标点符号、字符串开头和字符串结束)
^ ------ - 检测是否是字符串开头
$ -------- 检测是否是字符串结尾
分支 | ------- 在正则中表示或者
正则表达式1|正则表达式2|正则表达式3|… - 让字符串先和第一个正则进行匹配如果失败再和第二个正则进行匹配,以此类推
分组 -------- ( )
作用:
1)把正则的部分内容堪看成一个整体,进行操作
2)分组和\n配合使用来控制匹配内容重复
例:
作用1:
str2=r'abc(\d{3}|[A-Z]{2})'
print(fullmatch(str2,'abc123'))
作用2:
str3=r'abc(\d{2})\1'
print(fullmatch(str3,'abc7878'))
re模块中常用的方法
-
compile(正则表达式) - 编译正则表达式创建一个正则表达式对象 例: aa=re.compile(r'sfs') aa.fullmatch('afs')
-
匹配
-
fullmatch(正则表达式,字符串) - 完全匹配,查看整个字符串是否和正则匹配,匹配成功返回匹配对象,匹配失败返回None
-
match(正则表达式,字符串) - 匹配字符串开头,查看字符串开头是否和正则匹配,匹配成功返回匹配对象,匹配失败返回None
其中:针对match对象
a.获取匹配到的字符串 匹配对象.group() - 获取整个正则匹配到的结果
匹配对象.group(n) - 获取第n个结果
例:
str1='(\d{3})' x=re.match(str1,'123dDDF') print(x.group())
-
b.获取匹配到的字符串在原字符串中的位置
匹配对象.span()
匹配对象.span(n)
c.获取原字符串
匹配对象.string
- 查找
a. findall(正则表达式,字符串) - 正则中没有分组 - 列表中的元素就是整个正则匹配到的字串
- 正则中有一个分组 - 匹配成功后将分组匹配到的字串作为列表元素
- 正则中有多个分组 - 匹配成功后每个匹配结果是一个元组,元组中的元素是每个分组匹配到的内容,将元组作为列表的元素
b. finditer(正则表达式,字符串) - 获取字符串中所有满足正则表达式的字串;返回一个迭代器,迭代器中的元素是匹配对象
4.字符串替换
sub(正则表达式,新字符串,原字符串) - 将原字符串中所有满足正则表达式的字符串全部替换成新字符串
5.字符串切割
split(正则表达式,字符串) - 将字符串中满足正则表达式的字串作为切割点对字符进行切割
1.忽略大小写:在正则表达式的最前面加(?i)
2.单行匹配:.能够匹配换行符的匹配模式,在正则的最前面加(?s)
默认是多行匹配: .不能匹配换行符
3.符号的转义
在正则中有特殊功能或者特殊意义的符号前加\,让它的功能就表示符号本身
在[]外面独立存在有特殊功能的符号,在[]中功能会直接消失