第11.18节 Python 中re模块的匹配对象
匹配对象是Python中re模块正则表达式匹配处理的返回结果,用于存放匹配的情况。老猿认为匹配对象更多的应该是与组匹配模式的功能对应的,只是没有使用组匹配模式的正则表达式整体作为组0。
为了说明下面的属性和方法,以如下命名组匹配模式串和搜索文本作为例子来介绍:
>>> pattern='<h1 class="name">(?P<name>.*)</h1><h1 class="age">(?P<age>[0-9]{1,3})</h1>'
>>> str='<h1 class="name">LaoYuanPython</h1><h1 class="age">28</h1>'
>>> m=re.search(pattern,str)
匹配对象有如下重要属性:
- re:该匹配对象对应的正则表达式。如:
>>> m.re
re.compile('<h1 class="name">(?P<name>.*)</h1><h1 class="age">(?P<age>[0-9]{1,3})</h1>')
- string:该匹配对象对应的搜索字符串。如:
>>> m.string
'<h1 class="name">LaoYuanPython</h1><h1 class="age">28</h1>'
- lastgroup:最后一个匹配组的名字,如果没有匹配到或没有给组命名则为None。如:
>>> m.lastgroup
'age'
- lastindex:最后一个匹配组的序号,关于组的序号请参考《第11.16节 Python正则元字符“()”(小括号)与组(group)匹配模式》的介绍。如:
>>> m.lastindex
2
匹配对象有如下重要方法:
- expand(template):对template的模板字符串的反斜杠进行转义并且返回,数字引用(\1, \2)和命名组(\g<1>, \g) 替换为相应组的内容。
>>> m=re.search('(Lao)(\w+)(Python)','LaoYuanPython')
>>> m
<re.Match object; span=(0, 13), match='LaoYuanPython'>
>>> m.expand(r'\1\g<0>\2\n\r')
'LaoLaoYuanPythonYuan\n\r'
>>>
注意组0不能使用\0来访问,必须使用\g<0>进行访问。
2. start([group])、end([group]):表示匹配到的组对应字符串在搜索串中的起始位置和结束位置,其中group可以是组号或组名,可以不传,则默认为组0。如:
>>> m.start(1),m.end(1)
(17, 30)
- group([group1, …]):显示对应组匹配的搜索到的结果子串,参数可以为空,则显示组0的匹配结果串即整个搜索串,也可以为多个组,组可以是组号或组名来表示。如:
>>> m.group(0,1,2)
('<h1 class="name">LaoYuanPython</h1><h1 class="age">28</h1>', 'LaoYuanPython', '28')
>>> m.group(0,1,'age')
('<h1 class="name">LaoYuanPython</h1><h1 class="age">28</h1>', 'LaoYuanPython', '28')
- groups(default=None):返回一个元组,包含所有参与匹配的子组(不含组0)。 default 参数用于未参与匹配的子组显示,默认为 None.
>>> m.groups()
('LaoYuanPython', '28')
关于未匹配子组的情况,Python官网的如下例子可以说明:
>>> m = re.match(r"(\d+)\.?(\d+)?", "24")
>>> m.groups() # Second group defaults to None.
('24', None)
>>> m.groups('0') # Now, the second group defaults to '0'.
('24', '0')
- groupdict(default=None):返回一个字典,包含了所有的 命名 子组(关于命名子组请参考《》的介绍)。key就是组名。 default 参数用于不参与匹配的组合;默认为 None。 例如:
>>> m.groupdict()
{'name': 'LaoYuanPython', 'age': '28'}
- span([group]):返回匹配对象对应组匹配到文本在搜索文本中的起始和终止位置的元组,其结果与(m.start(group), m.end(group))相同 。 注意如果 参数group 没有在这个匹配中,就返回 (-1, -1) 。group 默认为0,就是整个匹配。
>>> m.span(1)
(17, 30)
案例:
>>> pattern='<h1 class="name">(?P<name>.*)</h1><h1 class="age">(?P<age>[0-9]{1,3})</h1>'
>>> str='<h1 class="name">LaoYuanPython</h1><h1 class="age">28</h1>'
>>> m=re.search(pattern,str)
>>> m.start('name'),m.end('name')
(17, 30)
>>> m.start(1),m.end(1)
(17, 30)
>>> m.string
'<h1 class="name">LaoYuanPython</h1><h1 class="age">28</h1>'
>>> m.re
re.compile('<h1 class="name">(?P<name>.*)</h1><h1 class="age">(?P<age>[0-9]{1,3})</h1>')
>>> m.lastgroup
'age'
>>> m.lastindex
2
老猿Python,跟老猿学Python!
博客地址:https://blog.csdn.net/LaoYuanPython
请大家多多支持,点赞、评论和加关注!谢谢!
第11.18节 Python 中re模块的匹配对象的更多相关文章
- 第11.23节 Python 中re模块的搜索替换功能:sub及subn函数
一. 引言 在<第11.3节 Python正则表达式搜索支持函数search.match.fullmatch.findall.finditer>重点介绍了几个搜索函数,除了搜索,re模块也 ...
- 第11.22节 Python 中re模块的字符串分割器:split函数
一. 引言 在<第11.2节 Python 正则表达式支持函数概览>介绍了re模块的主要函数,在<第11.3节 Python正则表达式搜索支持函数search.match.fullm ...
- 第11.24节 Python 中re模块的其他函数
一. re.compile函数 正则表达式编译函数,在后面章节专门介绍. 二. re.escape(pattern) re.escape是一个工具函数,用于对字符串pattern中所有可能被视为正则表 ...
- 第11.20节 Python 中正则表达式的扩展功能:后视断言、后视取反
一. 引言 在<第11.19节 Python 中正则表达式的扩展功能:前视断言和前视取反>中老猿介绍了前视断言和前视取反,与二者对应的还有后视断言和后视取反. 二. (?<=-)后视 ...
- 第11.21节 Python 中正则表达式的其他扩展功能
一. 引言 在<第11.17节 Python 正则表达式扩展功能:命名组功能及组的反向引用>中老猿介绍了组匹配模式的命名组功能及引用组功能,这两者都是正则表达式的扩展功能,其实在re模块中 ...
- 第11.19节 Python 中正则表达式的扩展功能:前视断言和前视取反
一. 引言 在<第11.16节 Python正则元字符"()"(小括号)与组(group)匹配模式>中老猿介绍了组匹配模式的命名组功能及引用组功能,这两者都是组模式的扩 ...
- 第11.6节 Python正则表达式的字符串开头匹配模式及元字符“^”(插入符、脱字符)功能介绍
符号"^"为插入符,也称为脱字符,在Python中脱字符表示匹配字符串的开头,即字符串的开头满足匹配模式的要求.这个功能有点类似搜索函数match,只是这是通过搜索模式来指定,而m ...
- 第11.5节 Python正则表达式搜索任意字符匹配及元字符“.”(点)功能介绍
在re模块中,任意字符匹配使用"."(点)来表示, 在默认模式下,点匹配除了换行的任意字符.如果指定了搜索标记re.DOTALL ,它将匹配包括换行符的任意字符.关于搜索标记的含义 ...
- 第11.7节 Python正则表达式的字符串结尾匹配模式及元字符“$”功能介绍
符号"$"表示匹配字符串的结尾,即字符串的结尾满足匹配模式的要求. 在 MULTILINE 模式(搜索标记中包含re.MULTILINE,关于搜索标记的含义请见<第11.2节 ...
随机推荐
- SpringBoot入门最简单的一个项目示例
使用IDEA创建一个SpringBoot项目 1.1 打开IDEA,文件-New-Project 1.2下一步,选择版本8(根据自己安装的JDK版本来选择) 1.3 下一步后点击Web,勾选Sprin ...
- -bash: bash_profile: command not found问题
这个问题一般就是.bash_profile 文件内容错误,里面内容没加注释之内的,vi .bash_profile打开文件检查一下,然后:wq!保存退出 我的错误就是红圈处没有注释造成的
- layui form表单提交
layui.use(['form'], function () { var form = layui.form; //监听提交 form.on('submit(formDemo)', function ...
- 【开发板试用报告】鸿蒙OS环境搭建及代码烧录
鸿蒙系统的代码编译环境需要linux系统,软件开发和代码烧录需要windows环境. Linux环境 参考官方链接:https://gitee.com/openharmony/docs/blob/ma ...
- Spider_基础总结3_BeautifulSoup对象+find()+find_all()
# 本节内容: # 解析复杂的 HTML网页: # 1--bs.find() bs.find_all() tag.get_text() # find_all(tag/tag_list,attribut ...
- 主动关闭 tcp fin-wait-2 time-wait 定时器
后面整理相关信息 //后面整理相关信息 /* * This function implements the receiving procedure of RFC 793 for * all state ...
- Golang调度器GMP原理与调度全分析(转 侵 删)
该文章主要详细具体的介绍Goroutine调度器过程及原理,包括如下几个章节. 第一章 Golang调度器的由来 第二章 Goroutine调度器的GMP模型及设计思想 第三章 Goroutine调度 ...
- Scrum转型(一) 为什么敏捷和Scrum
1.1 为什么敏捷 由于传统的瀑布模型管理方法无法满足现代某些软件产品开发过程的特点,我们需要使用敏捷的方法(例如,Scrum是一个让我们关注于在短时间里交付高质量商业价值的敏捷框架). 需求频繁变动 ...
- 预估ceph的迁移数据量
引言 我们在进行 ceph 的 osd 的增加和减少的维护的时候,会碰到迁移数据,但是我们平时会怎么去回答关于迁移数据量的问题,一般来说,都是说很多,或者说根据环境来看,有没有精确的一个说法,到底要迁 ...
- Redis 用的很溜,了解过它用的什么协议吗?
我是风筝,公众号「古时的风筝」,一个兼具深度与广度的程序员鼓励师,一个本打算写诗却写起了代码的田园码农! 文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在 ...