python中的正则表达式
1|0一. 简介
正则表达式又叫规则表达式,是处理字符串的强大工具。在python中通过调用re模块,可以实现正则匹配,正则表达式模式被编译成一系列的字节码,然后由C编写的匹配引擎执行
2|0二. python常用字符含义(匹配模式)
3|0三. re模块
3|11. re.match(pattern, string, flags=0) | match(string, [pos, endpos]) (这个用于编译后返回的正则表达式对象Pattern.match())
1) 作用:尝试从字符串的起始位置匹配一个模式,如果起始位置匹配成功,返回一个match对象,否则返回None
-
pattern:匹配的正则表达式
-
string:要匹配的字符串
-
flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等
2) 正则表达式可以包含一些可选标志修饰符来控制匹配模式。修饰符被指定为一个可选的标志,多个修饰符可以通过 | 来指定,如re.I | re.M表示对大小写不敏感和多行匹配
3) 实例
运行结果为:
为什么第一个起始位置匹配要加span()?
span()的作用是:返回一个元组包含匹配 (开始,结束) 的位置,如果不加span(),我们获得的只是一个match obj,只有加了span(),我们才能获得匹配对象的位置。不信请看:
为什么第二个非起始位置匹配不加span()?
不在起始位置匹配,默认返回的None,而None对象是没有span()方法的,这时候就会报错:
3|22. re.search(pattern, string, flags=0) | search(string, [pos, endpos]) (这个用于编译后返回的正则表达式对象Pattern.search())
1) 作用:在字符串内查找匹配模式,只要找到第一个匹配则返回一个match对象,如果没有找到,则返回None
3|33. re.match和re.search一旦匹配成功,就会返回一个match object对象,而match object对象有以下方法:
-
group(num) num代表组号,表示匹配第num组的字符串,不写时默认是0,表示匹配整个表达式的字符串。group()也可以一次输入多个组号,如group(1, 2, 3),这种情况下它将返回一个包含那些组所对应的元组
-
groups() 返回一个包含所有小组字符串的元组,从1到所含的小组号
-
span() 返回一个元组包含匹配(开始、结束)的位置
-
start() 返回匹配开始的位置
-
end() 返回匹配结束的位置
1) 实例
为什么第二组匹配是 (.*?) 而不是 (.*)
我们做个试验,尝试一下 (.*)
注意到group(2)的数据是不同的,这个是为什么呢?这就涉及到贪婪匹配和非贪婪匹配
贪婪匹配: 在整个表达式匹配成功的情况下,尽可能多的匹配。比如上面的 .*
.表示除换行之外的所有字符, *表示匹配前面的字符0次或无数次
非贪婪匹配:在整个表达式匹配成功的情况下,尽可能少的匹配。比图上面的 .*?
?表示匹配前面字符0次或1次
注意前面 are () .* 中,()前后是两个空格,而are之后两个空格之间有两种情况,1. "smarter than", 2. "smarter",具体选择哪种是由匹配模式决定的,当()里是贪婪匹配时,.*可以匹配smarter,可以匹配空格,可以匹配than,当()里是非贪婪模式时, .*?只会匹配smarter,因为它最多匹配一次
为什么要用前缀 r 呢?
我们知道在python中, \ 表示转义字符,如果需要匹配一个 \ 本身呢?我们就要用\\, 而分别对每个 \ 进行转义,就需要用 \\\\
注意:如果字符串中有字符*需要匹配,可以使用\*或字符集[*]
3|44. re.compile(pattern, [flags])
1) 作用:用于编译正则表达式,生成一个正则表达式对象(Pattern,这个Pattern不能直接实例化,必须由re.compile()进行构造),供match()和search()这两个函数使用
-
pattern:一个字符串形式的正则表达式
-
flags:编译标志位,用于控制正则表达式的匹配方式,如:是否区分大小写、多行匹配等
2) 实例1
实例2
3|55. re.findall(pattern, string, flags=0) | findall(string, [pos, endpos])
1) 作用:遍历匹配,以列表形式返回所有能匹配的子串,如果没找到匹配的,则返回空列表
-
string:待匹配的字符串
-
pos:可选参数,指定字符串的起始位置,默认为0
-
endpos:可选参数,指定字符串的结束位置,默认为字符串的长度
2) 实例
3|66. re.finditer(pattern, string, flags=0) | finditer(string, [pos, endpos])
1) 作用:搜索string,返回一个顺序访问每一个匹配结果(match对象)的迭代器。找到匹配的所有子串,并把它们作为一个迭代器返回。
2) 实例
3|77. re.split(pattern, string, [maxsplit=0, flags=0]) | split(string, [maxsplit])
1) 作用:按照能够匹配的子串将字符串分割后返回列表
-
pattern:匹配的正则表达式
-
string:要匹配的字符串
-
maxsplit:分割次数,maxsplit=1 分割一次,默认为0,不限制次数
-
flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写、多行匹配等
2) 实例1
实例2
使用带括号的正则表达式则可以将正则表达式匹配的内容也添加到列表内
4|0参考文章
__EOF__

本文链接:https://www.cnblogs.com/my_captain/p/9134417.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个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速度为什么快?