一、 什么是组

关于组匹配模式,Python官网上说得比较简单,也没有这个名词,只有组这个名词,老猿查了比较多的资料和做了相关测试之后才理解。

组匹配模式,就是在匹配的正则表达式中使用小括号“()”括起来的任意一个合法的匹配模式串,左括号标记组的起点,右括号标记组的终点,即组匹配模式定义为:

(组匹配模式串)

其中组匹配模式串是整个正则表达式的一个子匹配模式。在一个正则表达式内可以定义多个组,每个组都有一个顺序分配的序号(组还可以命名),其中组0为整个正则表达式,组1为第一个括号,组2为第二个括号,依次类推顺序分配…,最多99个组号。其中组0为所有正则表达式都默认的就是整个正则表达式,不论正则表达式是否使用组匹配模式。

《第11.3节 Python正则表达式搜索支持函数search、match、fullmatch、findall、finditer》介绍的这些搜索函数,其返回值都是一个匹配对象,匹配对象中存储的就是搜索结果,搜索结果保存在匹配对象的组属性中,使用“匹配对象.group(组序号)”、“匹配对象.groups()”等方式可以访问,这个匹配对象的组及其序号就是与正则表达式中的组一一对应。

之所以称为组,老猿认为有如下原因:

  1. 这种标识的组在整个匹配模式表达式在组后面的串中可以通过组名或组序号来引用;
  2. 其与搜索文本的匹配结果可以通过匹配对象的group(组序号)等方式来访问;
  3. 可以在组内定义类似《第11.2节 Python 正则表达式支持函数概览》中搜索函数中的搜索标记参数的搜索控制符,且搜索控制符的作用域只对该组有影响。

在《第11.3节 Python正则表达式搜索支持函数search、match、fullmatch、findall、finditer》介绍的这些搜索函数,其返回值都是一个匹配对象,匹配对象中存储的就是搜索结果,搜索结果保存在匹配对象的组属性中,使用“匹配对象.group(组序号)”、“匹配对象.groups()”等方式可以访问。

二、 案例

  1. 定义2个组:
>>> pattern='<h1 class="name">(.*)</h1><h1 class="age">([0-9]{1,3})</h1>'
>>> str='<h1 class="name">LaoYuanPython</h1><h1 class="age">28</h1>'
>>> m=re.search(pattern,str)
>>> m.groups()
('LaoYuanPython', '28')
>>> m.group(0)
'<h1 class="name">LaoYuanPython</h1><h1 class="age">28</h1>'
>>> m.group(1)
'LaoYuanPython'
>>> m.group(2)
'28'
>>>
  1. 组允许嵌套,如组A内可以嵌套组B,则嵌套的B组其组的序号在A的序号后面,但在A后面组的序号前面。如:
>>>pattern='<h1 class="name">(.*(P.?thon))</h1><h1 class="age">([0-9]{1,3})</h1>'
>>> str='<h1 class="name">LaoYuanPython</h1><h1 class="age">28</h1>'
>>> m=re.search(pattern,str)
>>> m.groups()
('LaoYuanPython', 'Python', '28')
>>> m.group(1)
'LaoYuanPython'
>>> m.group(2)
'Python'

老猿Python,跟老猿学Python!

博客地址:https://blog.csdn.net/LaoYuanPython


请大家多多支持,点赞、评论和加关注!谢谢!

第11.16节 Python正则元字符“()”(小括号)与组(group)匹配模式的更多相关文章

  1. 第11.27节 Python正则小结:正则静,静则明,明则虚,虚则无为而无不为也

    正则表达式的章节到此就结束了,老猿现在觉得对我们这些身具程序猿基因特色的人来说,正则表达式应该是蛮可口的开胃小菜. 在写标题时,本来想写"正则表达式小结",后来想了想,百度了一下, ...

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

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

  3. 第11.18节 Python 中re模块的匹配对象

    匹配对象是Python中re模块正则表达式匹配处理的返回结果,用于存放匹配的情况.老猿认为匹配对象更多的应该是与组匹配模式的功能对应的,只是没有使用组匹配模式的正则表达式整体作为组0. 为了说明下面的 ...

  4. 第11.17节 Python 正则表达式扩展功能:命名组功能及组的反向引用

    一. 引言 在<第11.16节 Python正则元字符"()"(小括号)与组(group)匹配模式>介绍了组匹配模式,在一个正则表达式内可以定义多个组,每个组都有一个顺 ...

  5. 第11.15节 Python正则表达式转义符定义的特殊序列

    一. 引言 在前面<第11.13节 Python正则表达式的转义符"\"功能介绍>介绍了正则表达式转义符'\',只不过当时作为转义符主要是用于在正则表达式中表示元字符自 ...

  6. 第11.25节 Python正则表达式编译re.compile及正则对象使用

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

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

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

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

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

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

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

随机推荐

  1. Go读取论文并转换为simhahs

    package main import ( "fmt" _"flag" _ "os" _ "io/ioutil" _&q ...

  2. leetcode24:word-ladder-ii

    题目描述 给定两个单词(初始单词和目标单词)和一个单词字典,请找出所有的从初始单词到目标单词的最短转换序列: 每一次转换只能改变一个单词 每一个中间词都必须存在单词字典当中 例如: 给定的初始单词st ...

  3. 【开发板试用报告】学习GPIO编程

    温湿度传感器 参考许老师教程:https://gitee.com/hihopeorg/ 下载源码git clone https://github.com/xusiwei/harmonyos-aht20 ...

  4. 关于java和JS中的lastIndexOf方法的误解。

    今天看JS的数组的lastIndexOf()方法,看书上的例子,怎么看都觉得不对劲.后来详细读了几遍解释,用java也测试了下,才发现,之前的理解完全是错误的. 上例子: String nums=&q ...

  5. fcntl函数用法——复制文件描述符

    文件描述符复制和输出重定向dup() 用最小的文件描述符来复制,从0开始搜素.复制文件描述符后,最小文件描述符指向被复制描述符指向的文件.dup2(int oldfd,int newfd) 强制用ne ...

  6. binary hacks读数笔记(objdump命令)

    一.首先看一下几个常用参数的基本含义: objdump命令是Linux下的反汇编目标文件或者可执行文件的命令,它还有其他作用,下面以ELF格式可执行文件test为例详细介绍: 1.objdump -f ...

  7. spark-submit提交python脚本过程记录

    最近刚学习spark,用spark-submit命令提交一个python脚本,一开始老报错,所以打算好好整理一下用spark-submit命令提交python脚本的过程.先看一下spark-submi ...

  8. 五:key关键字 string字符串 list列表 set集合 Zset有序集合

    key 1.keys 命令用于查找所有符合给定模式 pattern 的 key . keys *  查找所有的key返回一个列表 2.EXISTS xxx 检查是否有指定名字为xxx的key 有就返回 ...

  9. php(tp5)生成条形码

    因为公司业务需要,研究了一下条形码 1.下载barcodegen扩展包 官网地址:https://www.barcodebakery.com 2.下载完后解压至 extend 文件夹里面,然后复制以下 ...

  10. 新鲜出炉!阿里Java后端面经,已拿offer!

    前面给大家分享了一篇字节跳动拿下offer的面经,很多小伙伴都私信我说收获很大,感兴趣的朋友可以回头去看看.很多小伙伴还问我有没有其他大厂的面试题分享,这不他来啦,阿里2020春招面试题给大家整理在下 ...