一、 什么是组

关于组匹配模式,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. c# 创建delphi的代码

    需求: 有一个专业表,没有插入数据,读取的excel,复制为txt文件 每行读取 并且 将汉字的一转换为数字1 private void barButtonItem4_ItemClick(object ...

  2. 17 c10k问题

    所谓c10k问题,指的是服务器同时支持成千上万个客户端的问题,也就是concurrent 10 000 connection(这也是c10k这个名字的由来). 推荐: https://my.oschi ...

  3. Spring5.0源码学习系列之浅谈BeanFactory创建

    Spring5.0源码学习系列之浅谈BeanFactory创建过程 系列文章目录 提示:Spring源码学习专栏链接 @ 目录 系列文章目录 博客前言介绍 一.获取BeanFactory主流程 二.r ...

  4. SpringBoot第七集:异常处理与整合JSR303校验(2020最新最易懂)

    SpringBoot第七集:异常处理与整合JSR303校验(2020最新最易懂) 一.SpringBoot全局异常 先讲下什么是全局异常处理器? 全局异常处理器就是把整个系统的异常统一自动处理,程序员 ...

  5. CSS之calc()

    calc() 函数支持任意CSS长度单位的混合计算,遵循标准数学运算优先级规则,可以动态计算长度值.注意,calc()函数内部的运算符两侧各加一个空白符,否则会产生解析错误. calc()使用的难点在 ...

  6. mysql之数据锁

  7. C#高级编程之反射

    反射的定义 MSDN定义:反射提供描述程序集.模块和类型的对象(Type类型). 可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型,然后调用其方法或访问器字段和属性. 如 ...

  8. Seay源代码审计系统使用

    Seay源代码审计系统简介 Seay源代码审计系统使用 如何使用"Seay源代码审计系统"扫描源代码漏洞 Seay源代码审计系统下载安装 github-Seay源代码审计系统

  9. 重闯Sqli-labs关卡第三天(6-10关)

    第六关(双注入GET双引号字符型注) 核心代码: 1 $id = '"'.$id.'"'; 2 $sql="SELECT * FROM users WHERE id=$i ...

  10. Guitar Pro 7 中文界面的介绍

    用过Guitar Pro这款软件的小伙伴们都知道,Guitar Pro这款吉他软件因为是国外开发商研发的,所以软件最初都是英文版本,对于国内的的吉他爱好者来说,在软件使用上还是很不方便的.随着Guit ...