Python正则表达式模块re
正则表达式是一种通用的字符串匹配模式,使用灵活功能强大.
Python正则表达式支持的语法可以参见这张表
Python的标准模块re提供了对正则表达式的支持,使用r''
表示正则字符串可以避免转义字符带来的麻烦, 比如'\\d'
可以写作r'\d'
.
module method#
re.match#
re.match(pattern, string, flags)
参数:
-
pattern: 描述匹配模式的正则字符串
-
string: 要匹配的文本
-
flag: 控制匹配模式的标志位.
判断string是否符合pattern, 返回match对象包含匹配的部分:
>>> import re
>>> text = 'This is Finley, welcome to join us.'
>>> m = re.match(r'\w*is\w*', text)
>>> m.group(0)
'This'
re.search#
re.search(pattern, string, flags)
参数与re.match()相同, 在字符串内进行模式匹配, 找到第一个匹配后返回match对象.
>>> import re
>>> text = 'This is Finley, welcome to join us.'
>>> m = re.search(r'\w*is\w*', text)
>>> m.group(0)
'This'
re.search寻找字符串内从任意位置开始的匹配, 而re.match只寻找从字符串的头部开始的匹配.
修改上例的可以发现两者的区别:
>>>text = 'Here is Finley, welcome to join us.'
>>> m = re.match(r'\w*is\w*', text)
>>> m is None
True
>>> m = re.search(r'\w*is\w*', text)
>>> m.group(0)
'is'
re.findall#
re.findall(pattern, string)
以列表的形式返回所有匹配的子串:
>>> import re
>>> text = 'This is Finley, welcome to join us.'
>>> m = re.findall(r'\w*is\w*', text)
>>> m
['This', 'is']
re.sub#
re.sub(pattern, repl, string, count)
将匹配的子串替换为repl字符串,;
count参数指定替换个数, 默认为0表示全部替换.
re.split#
re.split(pattern, string)
将匹配的字符串作为分隔符, 将字符串分隔成一个列表:
>>> import re
>>> text = 'This is Finley, welcome to join us.'
>>> m = re.split(r'\s+', text)
>>> m
['This', 'is', 'Finley,', 'welcome', 'to', 'join', 'us.']
Match#
下文关于Match与Pattern对象的介绍转载自AstralWind
re模块中的很多方法使用Match对象表示匹配的结果, Match对象中存储了与此次匹配有关的的信息.
属性:
-
string: 匹配时使用的文本
-
re: 匹配时使用的Pattern对象
-
pos: 文本中正则表达式开始搜索的索引。值与Pattern.match()和Pattern.seach()方法的同名参数相同
-
endpos: 文本中正则表达式结束搜索的索引。值与Pattern.match()和Pattern.seach()方法的同名参数相同
-
lastindex: 最后一个被捕获的分组在文本中的索引。如果没有被捕获的分组,将为None
-
lastgroup: 最后一个被捕获的分组的别名。如果这个分组没有别名或者没有被捕获的分组,将为None
方法:
- groups([default]):
以元组形式返回全部分组截获的字符串。
default表示没有截获字符串的组以这个值替代,默认为None。
- group([group1, …]):
获得一个或多个分组截获的字符串,指定多个参数时将以元组形式返回.
group1可以使用编号也可以使用别名;编号0代表整个匹配的子串;
不填写参数时,返回group(0);没有截获字符串的组返回None;
截获了多次的组返回最后一次截获的子串。
- groupdict([default]):
返回以有别名的组的别名为键、以该组截获的子串为值的字典,没有别名的组不包含在内。default含义同上。
- start([group]):
返回指定的组截获的子串在string中的起始索引(子串第一个字符的索引)。group默认值为0
- end([group]):
返回指定的组截获的子串在string中的结束索引(子串最后一个字符的索引+1)。group默认值为0
- span([group]):
返回(start(group), end(group))。
- expand(template):
将匹配到的分组代入template中然后返回
template中可以使用\id或\g
\id与\g
Pattern#
Pattern对象是一个编译好的正则表达式,通过Pattern提供的一系列方法可以对文本进行匹配查找.
Pattern不能直接实例化,必须使用re.compile()进行构造.
re模块方法均有Pattern实例方法作为对应版本.
Pattern提供了几个可读属性用于获取表达式的相关信息:
-
pattern: 编译时用的表达式字符串
-
flags: 编译时用的匹配模式,数字形式。
-
groups: 表达式中分组的数量
groupindex: 以表达式中有别名的组的别名为键、以该组对应的编号为值的字典,没有别名的组不包含在内。
作者:finley
出处:https://www.cnblogs.com/Finley/p/5568234.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南