匹配对象是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)

匹配对象有如下重要属性:

  1. re:该匹配对象对应的正则表达式。如:
>>> m.re
re.compile('<h1 class="name">(?P<name>.*)</h1><h1 class="age">(?P<age>[0-9]{1,3})</h1>')
  1. string:该匹配对象对应的搜索字符串。如:
>>> m.string
'<h1 class="name">LaoYuanPython</h1><h1 class="age">28</h1>'
  1. lastgroup:最后一个匹配组的名字,如果没有匹配到或没有给组命名则为None。如:
>>> m.lastgroup
'age'
  1. lastindex:最后一个匹配组的序号,关于组的序号请参考《第11.16节 Python正则元字符“()”(小括号)与组(group)匹配模式》的介绍。如:
>>> m.lastindex
2

匹配对象有如下重要方法:

  1. 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)
  1. 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')
  1. 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')
  1. groupdict(default=None):返回一个字典,包含了所有的 命名 子组(关于命名子组请参考《》的介绍)。key就是组名。 default 参数用于不参与匹配的组合;默认为 None。 例如:
>>> m.groupdict()
{'name': 'LaoYuanPython', 'age': '28'}
  1. 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模块的匹配对象的更多相关文章

  1. 第11.23节 Python 中re模块的搜索替换功能:sub及subn函数

    一. 引言 在<第11.3节 Python正则表达式搜索支持函数search.match.fullmatch.findall.finditer>重点介绍了几个搜索函数,除了搜索,re模块也 ...

  2. 第11.22节 Python 中re模块的字符串分割器:split函数

    一. 引言 在<第11.2节 Python 正则表达式支持函数概览>介绍了re模块的主要函数,在<第11.3节 Python正则表达式搜索支持函数search.match.fullm ...

  3. 第11.24节 Python 中re模块的其他函数

    一. re.compile函数 正则表达式编译函数,在后面章节专门介绍. 二. re.escape(pattern) re.escape是一个工具函数,用于对字符串pattern中所有可能被视为正则表 ...

  4. 第11.20节 Python 中正则表达式的扩展功能:后视断言、后视取反

    一. 引言 在<第11.19节 Python 中正则表达式的扩展功能:前视断言和前视取反>中老猿介绍了前视断言和前视取反,与二者对应的还有后视断言和后视取反. 二. (?<=-)后视 ...

  5. 第11.21节 Python 中正则表达式的其他扩展功能

    一. 引言 在<第11.17节 Python 正则表达式扩展功能:命名组功能及组的反向引用>中老猿介绍了组匹配模式的命名组功能及引用组功能,这两者都是正则表达式的扩展功能,其实在re模块中 ...

  6. 第11.19节 Python 中正则表达式的扩展功能:前视断言和前视取反

    一. 引言 在<第11.16节 Python正则元字符"()"(小括号)与组(group)匹配模式>中老猿介绍了组匹配模式的命名组功能及引用组功能,这两者都是组模式的扩 ...

  7. 第11.6节 Python正则表达式的字符串开头匹配模式及元字符“^”(插入符、脱字符)功能介绍

    符号"^"为插入符,也称为脱字符,在Python中脱字符表示匹配字符串的开头,即字符串的开头满足匹配模式的要求.这个功能有点类似搜索函数match,只是这是通过搜索模式来指定,而m ...

  8. 第11.5节 Python正则表达式搜索任意字符匹配及元字符“.”(点)功能介绍

    在re模块中,任意字符匹配使用"."(点)来表示, 在默认模式下,点匹配除了换行的任意字符.如果指定了搜索标记re.DOTALL ,它将匹配包括换行符的任意字符.关于搜索标记的含义 ...

  9. 第11.7节 Python正则表达式的字符串结尾匹配模式及元字符“$”功能介绍

    符号"$"表示匹配字符串的结尾,即字符串的结尾满足匹配模式的要求. 在 MULTILINE 模式(搜索标记中包含re.MULTILINE,关于搜索标记的含义请见<第11.2节 ...

随机推荐

  1. 面试官问我redis数据类型,我回答了8种

    面试官:小明呀,redis 有几种数据结构呀? 小明:8 种 面试官:那你说一下分别是什么? 小明:raw,int,ht,zipmap,linkedlist,ziplist,intset,skipli ...

  2. javascript多物体运动案例:多物体淡入淡出

    javascript多物体运动案例:多物体淡入淡出 任务描述: 补充代码,当鼠标移入红色区域时,该区域透明度逐渐增加至不透明;当鼠标移出该红色区域时,该区域透明度逐渐恢复至初始程度. 效果图: < ...

  3. 手写一个最迷你的Web服务器

    今天我们就仿照Tomcat服务器来手写一个最简单最迷你版的web服务器,仅供学习交流. 1. 在你windows系统盘的F盘下,创建一个文件夹webroot,用来存放前端代码.  2. 代码介绍: ( ...

  4. Rest语法,传入多个参数

    Rest语法,传入多个参数 js调用函数时可以传入任意数量的参数,而不报错.如果传入的参数没有用到,那么传入多余的参数没有任何用处,那不是瞎子点灯白费蜡嘛.为了充分利用传入的每一个参数,我们可以采用R ...

  5. JavaScript监听页面可见性(焦点)同时改变title的三种方法

    JavaScript监听页面可见性(焦点)同时改变title的三种方法 本文参考了https://developer.mozilla.org/zh-CN/docs/Web/API/Page_Visib ...

  6. Dubbo 服务引入-Version2.7.5

    1.服务引用原理 Dubbo 服务引用的时机有两个,第一个是在 Spring 容器调用 ReferenceBean 的 afterPropertiesSet 方法时引用服务,第二个是在 Referen ...

  7. 每天一个linux命令之top

    每天一个linux命令之top 转  https://www.linuxprobe.com/chapter-02.html 在图2-6中,top命令执行结果的前5行为系统整体的统计信息,其所代表的含义 ...

  8. 为什么 @Value 可以获取配置中心的值?

    hello,大家好,我是小黑,好久不见~~ 这是关于配置中心的系列文章,应该会分多篇发布,内容大致包括: 1.Spring 是如何实现 @Value 注入的 2.一个简易版配置中心的关键技术 3.开源 ...

  9. 面试官:你说你精通源码,那你知道ArrayList 源码的设计思路吗?

    Arraylist源码分析 ArrayList 我们几乎每天都会使用到,但是通常情况下我们只是知道如何去使用,至于其内部是怎么实现的我们不关心,但是有些时候面试官就喜欢问与ArrayList 的源码相 ...

  10. FL Studio通道乐器设置页详讲

    上一篇文章我们说到FL Studio通道乐器设置页每个标签页面中几乎都是由包络.低频振荡器和滤波器这三个部分组成.我们之前只对包络进行的简单的介绍,相信很多同学对它还有其他两个的功能的了解还是云里雾里 ...