简介
正则表达式(Regular Expression)是一种文本模式,通过特定字符的组合定义规则,用于检索、替换或验证符合该规则的字符串,对应的内置模块为re。
功能:快速从字符串中提取想要的字符(串)
re模块中的常用函数
match()
re.match(pattern,string,flag=0)
#从头开始查找,只要找到一个就返回,找不到则返回None
group()显示其匹配的字符串,start()开始的序号,end()结束的序号
text7='xb12315 hc12306 xf119 jj120 jc110'
tmp=re.match(r'\d+',text7)
if tmp:
print(tmp,'匹配到的字符串为:',tmp.group())
print('位置信息:',tmp.span(), '开始的序号:',tmp.start(),'结尾的序号:',tmp.end())
else:
print('没有匹配上')
#输出
没有匹配上
search()
re.search(pattern,string,flag=0)
#查找所有,但返回第一个match对象,找不到返回None,建议优先使用该方法替换match
group()显示其匹配的字符串,start()开始的序号,end()结束的序号
text7='xb12315 hc12306 xf119 jj120 jc110'
tmp=re.search(r'\d+',text7)
if tmp:
print(tmp,'匹配到的字符串为:',tmp.group())
print('位置信息:',tmp.span(), '开始的序号:',tmp.start(),'结尾的序号:',tmp.end())
else:
print('没有匹配上')
#输出
<re.Match object; span=(2, 7), match='12315'> 匹配到的字符串为: 12315
位置信息: (2, 7) 开始的序号: 2 结尾的序号: 7
findall()
re.findall(pattern,string,flag=0)
#查找所有,返回列表,若找不到则返回空列表
text7='xb12315 hc12306 xf119 jj120 jc110'
print(re.findall('\d+',text7))
#输出
['12315', '12306', '119', '120', '110']
split()
re.split(pattern,string,maxsplit=0,flag=0)
#切割,与字符的split()作用一样,但功能更强,返回切割后的列表
text7='xb12315 hc12306 xf119 jj120 jc110'
print(re.split(r'\W+',text7))
print(re.split(r'\s',text7))
#输出
['xb12315', 'hc12306', 'xf119', 'jj120', 'jc110']
['xb12315', 'hc12306', 'xf119', 'jj120', 'jc110']
sub()
re.sub(pattern,repl,strings,count=0,flag=0)
#替换,与replace()类似,将字符串中满足pattern的字符串替换为repl,替换次数为count,若是一次也没匹配到,则返回原始字符串
import re
text7='xb12315 hc12306 xf119 jj120 za110'
print(re.sub('\d+','123456789',text7))
#输出
xb123456789 hc123456789 xf123456789 jj123456789 za123456789
finditer()
finditer(pattern,strings,flag=0)
# 查找 返回一个匹配结果的迭代类型,每个迭代元素是match对象
import re
text7='xb12315 hc12306 xf119 jj120 za110'
matcher=re.finditer('[a-z]{2}\d+',text7)
for match_one in matcher:
print(match_one.group(),type(match_one))
#输出
xb12315 <class 're.Match'>
hc12306 <class 're.Match'>
xf119 <class 're.Match'>
jj120 <class 're.Match'>
za110 <class 're.Match'>
常见的匹配格式pattern
单个字符
| pattern | 含义 |
| '.' | 任意字符 |
| ‘[]’ | 枚举具体的字母数字等 |
| '\n' | 换行 |
| '\t' | 制表符 |
| '\s' | 空格 |
| '\w' | 字母数字和下划线 |
| '\d' | 数字 |
| '\W' | 非 字母、数字、下划线 |
| '\D' | 非数字 |
| '\S' | 非空格 |
| '\b' | 单词的边界 |
| '\B' | 非 单词边界 |
| '^' | 字符串的开头 |
| '$' | 字符串的结尾 |
| '\b' | 单词的便捷 |
| 'a|b' | a或b |
| '(abc)' | 匹配字符串abc |
| '\' | 转义字符,不单独用,与()[] {} 等结合使用 |
字符的数量
| pattern | 含义 | 示例 |
| * | 0次或者任意次 | ‘[0-9]*’ 匹配任意次0-9的数字 |
| ‘+’ | 1次或者任意次 | |
| '?' | 0次或者1次 | |
| '{n} | n次 | |
| '{n,m}' |
n到m次 |
|
| '{n,}' | n次及以上以上 | |
| '{,m}' | 至多m次 | |
最小匹配
正则默认为贪婪模式,加上?可以变为最小模式
| pattern | 含义 | 示例 |
| *? | 0次或者任意次,取少的 |
re.search('(abc)*?',‘abcabc’).group() #输出空 |
| ‘+?’ | 1次或者任意次,取少的 |
re.search('(abc)+?',‘abcabc’).group() #输出abc |
| '??' | 0次或者1次,取少的 |
re.search('(abc)??',‘abcabc’).group() #输出空 |
| '{n,m}?' |
n次或者0次,取少的 |
|
匹配模式flag
| pattern | 含义 | 示例 |
| re.I | 忽略大小写 |
text6="a bc def\n\ #输出b is 98 |
| re.M | 多行匹配 |
text6="a bc def\n\ #输出b is 98 |
| re.A | ascii模式 | |
| re.U | Unicode字符解析 | |
| re.X | 增加可读性,忽略空格和#后面注释 | |
| re.U | Unicode字符解析 | |