第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节 ...
随机推荐
- 【阿里云-大数据】阿里云DataWorks学习视频汇总
阿里云DataWorks学习视频汇总 注意:本文档中引用的视频均来自阿里云官方的帮助文档,本文档仅仅是汇总整理,方便学习. 阿里云DataWorks帮助文档链接:https://help.aliyun ...
- ClassNotFoundException: java.util.ArrayList$SubList 错误
ClassNotFoundException: java.util.ArrayList$SubListjava.lang.RuntimeException: java.lang.ClassNotFou ...
- jdk的动态代理和静态代理你还写不出来嘛???
一.什么叫jdk的代理? 用另外一个对象去代理实际对象的操作 分为动态代理和静态代理二.先说说静态代理 从字面意思来看就是不会改变的,只可以代理某个固定对象的. 静态代理就是通过实现和目标对象实现的同 ...
- c语言 字符指针数组的用法
#include <stdio.h> #include <stdlib.h> int main(){ //字符数组的使用 char str[] = {'z','b','c',' ...
- Flink SQL Client综合实战
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- leetcode Reverse Nodes in k-Group翻转链表K个一组
Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. k ...
- 极客mysql03
1.务的特性:原子性.一致性.隔离性.持久性 2.多事务同时执行的时候,可能会出现的问题:脏读.不可重复读.幻读 3.事务隔离级别:读未提交.读提交.可重复读.串行化 4.不同事务隔离级别的区别: 读 ...
- if __name__ == "__main__"的疑惑
Python中if __name__ == "__main__"详细解释: 想必很多初次接触python都会见到这样一个语句,if __name__ == "__main ...
- 推荐一个学习SQL Server基本语法及其他编程的网站
菜鸟们的练习场 1.领先的 Web 技术教程 在 w3school,你可以找到你所需要的所有的网站建设教程. 从基础的 HTML 到 CSS,乃至进阶的XML.SQL.JS.PHP 和 ASP.NET ...
- XSS(跨站脚本攻击) - 常用代码大全
XSS(跨站脚本攻击) - 常用代码大全-版本一 1'"()&%<acx><ScRiPt >prompt(915149)</ScRiPt> < ...