在python当中使用正则表达式,主要是通过通过python提供的一个模块--re,这个模块提供了一个正则表达式引擎的接口,可以让你将REstring编译成对象并用他们来进行匹配。
编译正则表达式,编译后的正则,要比未编译的正则,匹配速度快很多
#首先导入re模块 import re r = r'\d{3,4}-?\d{8}$' #定义一个正则 p_tell = re.compile(r) #编译正则,给对象p_tell print(p_tell.findall('010-12345678')) #此时就可以直接这么用
在编译过程中也可以接受可选的标识参数,让正则更灵活。例如:
csvt_re = re.compile(r'csvt',re.I)#编译过程中加上re.I这个参数就是不分大小写,re.I是正则的一个属性 print(csvt_re.findall('CSVT')) print(csvt_re.findall('csvt')) print(csvt_re.findall('cSvT')) # 打印结果:['CSVT'] # ['csvt'] # ['cSvT']
在定义正则时,反斜杠会比较麻烦,这时可以在字符串前加‘r’,反斜杠就不会被任何特殊方式处理
执行匹配
match():决定re是否在字符串刚开始的位置匹配
import re csvt_re = re.compile(r'csvt',re.I) #编译正则 print(csvt_re.match('csvt hello')) #匹配到会返回一个对象 print(csvt_re.match('hello')) #匹配不到会返回一个空None print(csvt_re.match(' hello csvt')) #在实际程序中,最常见的做法是把MacthObject保存在一个变量里,然后检查它是否为None x = csvt_re.match('hello csvt ') if x: print('匹配到了!') else: print('未匹配到!')
search():扫描整个字符串,找到re匹配的位置
import re csvt_re = re.compile(r'csvt',re.I) #编译正则 print(csvt_re.search('hello csvt')) #有结果,返回一个对象 print(csvt_re.search('csvt hello')) #有结果,返回一个对象 print(csvt_re.search('hello csvt hello')) #有结果,返回一个对象 print(csvt_re.search('hello hello')) #没有有结果,返回None
findall():找到re匹配的所有子串,并把他们作为一个列表返回
import re csvt_re = re.compile(r'csvt',re.I) print(csvt_re.findall('hello csvt hello csvt csvt')) #打印结果:['csvt', 'csvt', 'csvt']
实例方法
group():返回被re匹配的字符串
#首先导入re模块 import re csvt_re = re.compile(r'csvt',re.I) #re.match()方法,返回的是一个对象,接着使用.group()方法,可以直接返回匹配的到字符 print(csvt_re.match('csvt hello')) print(csvt_re.match('csvt hello').group()) #打印结果依次为:<_sre.SRE_Match object; span=(0, 4), match='csvt'> # csvt
start():返回匹配开始的位置
end():返回匹配结束的位置
span():返回一个元组包含匹配(开始,结束)的位置
模块级函数
--re模块也提供了顶级函数调用如:match()、search()、sub()、subn()、split()、findall()等
sub() subn()
import re csvt_re = re.compile(r'csvt',re.I) #定义一个正则 s = 'csvt caat cvvt cccc' rs = r'c..t' print(re.sub(rs,'python',s)) print(re.subn(rs,'python',s)) #打印结果:python python python cccc # ('python python python cccc', 3) subn()打印结果多了一个数字,一共替换了多少次
split():切割
import re s = '123+456-789*000' print(re.split(r'[\+\-\*]',s)) #打印结果:['123', '456', '789', '000']
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?