第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节 ...
随机推荐
- PHP修改css文件中的背景图片并下载到本地
扒网站当中一般css中的图片扒不下来,这个脚本就是用来下载这些图片到本地的 流程 1.获取css文件路径 2.打开文件逐行读取判断是否包含需要的图片 2.1 包含则 -进行截取直接获取到相对路径 2. ...
- leetcode144 longest-palindromic-substring
题目描述 找出给出的字符串S中最长的回文子串.假设S的最大长度为1000,并且只存在唯一解. Given a string S, find the longest palindromic substr ...
- 白话科普系列——双十一,竟然是一场有“预谋”的DDoS攻击?
随著互联网与信息技术的发展,所有人都在享受互联网带来的舒适和便利.如今,无论是个人社交行为,还是商业活动都早已离不开互联网. 但是,网络空间在创造机遇的同时,也带来了威胁.随着企业价值.知名度的提高. ...
- 后端狗的Vue学习历程(一) - demo示例与基本逻辑语法
目录 demo的三部分结构 判断:v-if.v-else-if.v-else 循环:v-for 事件绑定 v-on:eventType 内容输入的双向绑定v-model 源码:Github demo的 ...
- 天啦噜!仅仅5张图,彻底搞懂Python中的深浅拷贝
Python中的深浅拷贝 在讲深浅拷贝之前,我们先重温一下 is 和==的区别. 在判断对象是否相等比较的时候我们可以用is 和 == is:比较两个对象的引用是否相同,即 它们的id 是否一样 == ...
- centos常用指令之-卸载
卸载centos自带java: rpm -qa|grep java // 查询javax相关 xxxxxxxxxxxxxx # 卸载1.2方式 # 1 yum -y remove java xxxxx ...
- UNP——第二章,TCP状态,TIME_WAIT
状态可以用 netstat 验证 加粗线为 数据交换. 可以看出,TCP在 建立连接和 关闭连接,耗费资源, 因为UDP只需要两次数据通信即可. 但UDP没有可靠传输,和流量控制. 上面协商的MSS为 ...
- 异步FIFO学习笔记
- http://www.etymon.cn/yingyucigen/3093.html
import requests import lxml.etree as etree import xml.etree.ElementTree as ET # 详情页 # 3093-148 # htt ...
- xml格式数据和数组数据互相转换
数组转换成xml数据 <?php $arr=array( 'username'=>'huahua', 'password'=>'123456', 'number'=>'1588 ...