python笔记56-re正则匹配re.match
前言
re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
re.search 扫描整个字符串并返回第一个成功的匹配。
re.match
re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
使用语法:
re.match(pattern, string, flags=0)
函数参数说明:
- pattern 匹配的正则表达式
- string 要匹配的字符串。
- flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。参见:正则表达式修饰符,可选标志
匹配成功re.match方法返回一个匹配的对象,否则返回None。
我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。
- group(num=0) 匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。
- groups() 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。
match 使用示例
从起始位置开始匹配,没匹配到返回None
import re
# 在起始位置匹配
r1 = re.match("hello", "hello world!")
# 不在起始位置匹配
r2 = re.match("world", "hello world!")
print(r1)
print(r2)
返回
import re
# 在起始位置匹配
r1 = re.match("hello", "hello world!")
# 不在起始位置匹配
r2 = re.match("world", "hello world!")
print(r1)
print(r2)
运行结果
<_sre.SRE_Match object; span=(0, 5), match='hello'>
None
使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。
import re
line = "Cats are smarter than dogs"
matchObj = re.match(r'(.*) are (.*?) .*', line, re.M|re.I)
if matchObj:
print("matchObj.group() : ", matchObj.group())
print("matchObj.group(1) : ", matchObj.group(1))
print("matchObj.group(2) : ", matchObj.group(2))
else:
print("No match!!")
运行结果
matchObj.group() : Cats are smarter than dogs
matchObj.group(1) : Cats
matchObj.group(2) : smarter
search 示例
先看第一个案例,找出下面文本中的blog地址
import re
# 取出 blog 地址
a = '作者-上海悠悠 QQ交流群:717225969 blog地址:https://www.cnblogs.com/yoyoketang/ 欢迎收藏'
res = re.search(r'blog地址:(.*?) 欢迎收藏', a)
print(res) # 返回Match object
print(res.group(1))
# 打印内容
# <_sre.SRE_Match object; span=(24, 71), match='blog地址:https://www.cnblogs.com/yoyoketang/ 欢迎收藏'>
# https://www.cnblogs.com/yoyoketang/
如果匹配到返回一个Match object对象,用group(1)取出匹配的值。
如果没匹配到返回的是None,调用group(1)方法会抛异常
import re
# 取出 blog 地址
a = '作者-上海悠悠 QQ交流群:717225969 blog地址:https://www.cnblogs.com/yoyoketang/ 欢迎收藏'
res = re.search(r'blog地址X:(.*?) 欢迎收藏', a)
print(res) # 返回Match object
print(res.group(1))
会抛出异常
Traceback (most recent call last):
File "D:/soft/git/web_git/case/a.py", line 29, in <module>
print(res.group(1))
None
AttributeError: 'NoneType' object has no attribute 'group'
于是可以加个判断再取值: result = res.group(1) if res else None
import re
# 取出 blog 地址
a = '作者-上海悠悠 QQ交流群:717225969 blog地址:https://www.cnblogs.com/yoyoketang/ 欢迎收藏'
res = re.search(r'blog地址:(.*?) 欢迎收藏', a)
print(res) # 返回Match object
# 加个判断,如果没匹配到给None值
result = res.group(1) if res else None
print(result)
search教程参考这篇https://www.cnblogs.com/yoyoketang/p/14249008.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2019-06-23 docker学习1-CentOS 7安装docker环境
2019-06-23 python笔记38-使用zmail发各种邮件案例代码