热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python正则表达式分组匹配_Python正则表达式(分组)

正则表达式分组分组就是用一对圆括号“()”括起来的正则表达式,匹配出的内容就表示一个分组。从正则表达式的左边开始看,看到的第一个左括号“(”表示第一个分

正则表达式分组

分组就是用一对圆括号“()”括起来的正则表达式,匹配出的内容就表示一个分组。从正则表达式的左边开始看,看到的第一个左括号“(”表示第一个分组,第二个表示第二个分组,依次类推,需要注意的是,有一个隐含的全局分组(就是0),就是整个正则表达式。

分完组以后,要想获得某个分组的内容,直接使用group(num)和groups()函数去直接提取就行。

例如:提取代码中的超链接中的文本

>>> s='

更多

dfsl

'

>>> print re.search(r'(.*)',s).group(1)

更多

或者

>>> print re.match(r'.*(.*)',s).group(1)

更多

按照上面的分组匹配以后,我们就可以拿到我们想拿到的字串,但是如果我们正则表达式中括号比较多,那我们在拿我们想要的字串时,要去挨个数我们想要的字串时第几个括号,这样会很麻烦,这个时候Python又引入了另一种分组,那就是命名分组,上面的叫无名分组。

命名分组

命名分组就是给具有默认分组编号的组另外再给一个别名。命名分组的语法格式如下:

(?P正则表达式)#name是一个合法的标识符

如:提取字符串中的ip地址

>>> s = "ip='230.192.168.78',version='1.0.0'"

>>> re.search(r"ip='(?P\d+\.\d+\.\d+\.\d+).*", s)

>>> res.group('ip')#通过命名分组引用分组

'230.192.168.78'

后向引用

正则表达式中,放在圆括号“()”中的表示是一个组。然后你可以对整个组使用一些正则操作,例如重复操作符。

要注意的是,只有圆括号”()”才能用于形成组。”“用于定义字符集。”{}”用于定义重复操作。

当用”()”定义了一个正则表达式组后,正则引擎则会把被匹配的组按照顺序编号,存入缓存。这样我们想在后面对已经匹配过的内容进行引用时,就可以用”\数字”的方式或者是通过命名分组进行”(?P=name)“进行引用。\1表示引用第一个分组,\2引用第二个分组,以此类推,\n引用第n个组。而\0则引用整个被匹配的正则表达式本身。这些引用都必须是在正则表达式中才有效,用于匹配一些重复的字符串。

如:

#通过命名分组进行后向引用

>>> re.search(r'(?Pgo)\s+(?P=name)\s+(?P=name)', 'go go go').group('name')

'go'

#通过默认分组编号进行后向引用

>>> re.search(r'(go)\s+\1\s+\1', 'go go go').group()

'go go go'

交换字符串的位置

>>> s = 'abc.xyz'

>>> re.sub(r'(.*)\.(.*)', r'\2.\1', s)

'xyz.abc'

前向肯定断言、后向肯定断言

前向肯定断言的语法:

(?=pattern)

后向肯定断言的语法:

(?<&#61;pattern)

需要注意的是&#xff0c;如果在匹配的过程中&#xff0c;需要同时用到前向肯定断言和后向肯定断言&#xff0c;那么必须将后向肯定断言写在正则语句的前面&#xff0c;前向肯定断言写在正则语句的后面&#xff0c;表示后向肯定模式之后&#xff0c;前行肯定模式之前。

如&#xff1a;获取c语言代码中的注释内容

>>> s1&#61;&#39;&#39;&#39;char *a&#61;"hello world"; char b&#61;&#39;c&#39;; /* this is comment */ int c&#61;1; /* t

his is multiline comment */&#39;&#39;&#39;

>>> re.findall( r&#39;(?<&#61;/\*).&#43;?(?&#61;\*/)&#39; , s1 ,re.M|re.S)

[&#39; this is comment &#39;, &#39; this is multiline comment &#39;]

(?<&#61;/*)这个是后向肯定断言&#xff0c;表示“/*”之后。(?&#61;*/)这个为前向肯定断言&#xff0c;表示“*/”之前&#xff0c;这两合并起来就是一个区间了&#xff0c;所以后向肯定断言放在前向肯定断言前面。

前向否定断言、后向否定断言

前向否定断言语法&#xff1a;

(?!pattern)

后向否定断言语法&#xff1a;

(?

前向否定和后向否定实例&#xff1a;

#提取不是.txt结尾的文件

>>> f1 &#61; &#39;aaa.txt&#39;

>>> re.findall(r&#39;.*\..*$(?

[]

#提取不以数字开头的文件

>>> re.findall(r&#39;^(?!\d&#43;).*&#39;,&#39;1txt.txt&#39;)

[]

#提取不以数字开头不以py结尾的文件

>>> re.findall(r&#39;^(?!\d&#43;).&#43;?\..*$(?

[]

>>> re.findall(r&#39;^(?!\d&#43;).&#43;?\..*$(?

[&#39;test.txt&#39;]



推荐阅读
  • 本文详细介绍了批处理技术的基本概念及其在实际应用中的重要性。首先,对简单的批处理内部命令进行了概述,重点讲解了Echo命令的功能,包括如何打开或关闭回显功能以及显示消息。如果没有指定任何参数,Echo命令会显示当前的回显设置。此外,文章还探讨了批处理技术在自动化任务执行、系统管理等领域的广泛应用,为读者提供了丰富的实践案例和技术指导。 ... [详细]
  • Python内置模块详解:正则表达式re模块的应用与解析
    正则表达式是一种强大的文本处理工具,通过特定的字符序列来定义搜索模式。本文详细介绍了Python内置的`re`模块,探讨了其在字符串匹配、验证和提取中的应用。例如,可以通过正则表达式验证电子邮件地址、电话号码、QQ号、密码、URL和IP地址等。此外,文章还深入解析了`re`模块的各种函数和方法,提供了丰富的示例代码,帮助读者更好地理解和使用这一工具。 ... [详细]
  • C语言中全部可用的数学函数有哪些?2.longlabs(longn);求长整型数的绝对值。3.doublefabs(doublex);求实数的绝对值。4.doublefloor(d ... [详细]
  • 本文介绍了几种常用的图像相似度对比方法,包括直方图方法、图像模板匹配、PSNR峰值信噪比、SSIM结构相似性和感知哈希算法。每种方法都有其优缺点,适用于不同的应用场景。 ... [详细]
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 单片机入门指南:基础理论与实践
    本文介绍了单片机的基础知识及其应用。单片机是一种将微处理器(类似于CPU)、存储器(类似硬盘和内存)以及多种输入输出接口集成在一块硅片上的微型计算机系统。通过详细解析其内部结构和功能,帮助初学者快速掌握单片机的基本原理和实际操作方法。 ... [详细]
  • 本文介绍了如何利用 `matplotlib` 库中的 `FuncAnimation` 类将 Python 中的动态图像保存为视频文件。通过详细解释 `FuncAnimation` 类的参数和方法,文章提供了多种实用技巧,帮助用户高效地生成高质量的动态图像视频。此外,还探讨了不同视频编码器的选择及其对输出文件质量的影响,为读者提供了全面的技术指导。 ... [详细]
  • 在《Linux高性能服务器编程》一书中,第3.2节深入探讨了TCP报头的结构与功能。TCP报头是每个TCP数据段中不可或缺的部分,它不仅包含了源端口和目的端口的信息,还负责管理TCP连接的状态和控制。本节内容详尽地解析了TCP报头的各项字段及其作用,为读者提供了深入理解TCP协议的基础。 ... [详细]
  • 该大学网站采用PHP和MySQL技术,在校内可免费访问某些外部收费资料数据库。为了方便学生校外访问,建议通过学校账号登录实现免费访问。具体方案可包括利用学校服务器作为代理,结合身份验证机制,确保合法用户在校外也能享受免费资源。 ... [详细]
  • 深入探索HTTP协议的学习与实践
    在初次访问某个网站时,由于本地没有缓存,服务器会返回一个200状态码的响应,并在响应头中设置Etag和Last-Modified等缓存控制字段。这些字段用于后续请求时验证资源是否已更新,从而提高页面加载速度和减少带宽消耗。本文将深入探讨HTTP缓存机制及其在实际应用中的优化策略,帮助读者更好地理解和运用HTTP协议。 ... [详细]
  • C语言中如何使用break语句强制跳出for循环及函数 ... [详细]
  • 计算机视觉领域介绍 | 自然语言驱动的跨模态行人重识别前沿技术综述(上篇)
    本文介绍了计算机视觉领域的最新进展,特别是自然语言驱动的跨模态行人重识别技术。上篇内容详细探讨了该领域的基础理论、关键技术及当前的研究热点,为读者提供了全面的概述。 ... [详细]
  • 2012年9月12日优酷土豆校园招聘笔试题目解析与备考指南
    2012年9月12日,优酷土豆校园招聘笔试题目解析与备考指南。在选择题部分,有一道题目涉及中国人的血型分布情况,具体为A型30%、B型20%、O型40%、AB型10%。若需确保在随机选取的样本中,至少有一人为B型血的概率不低于90%,则需要选取的最少人数是多少?该问题不仅考察了概率统计的基本知识,还要求考生具备一定的逻辑推理能力。 ... [详细]
  • 利用树莓派畅享落网电台音乐体验
    最近重新拾起了闲置已久的树莓派,这台小巧的开发板已经沉寂了半年多。上个月闲暇时间较多,我决定将其重新启用。恰逢落网电台进行了改版,回忆起之前在树莓派论坛上看到有人用它来播放豆瓣音乐,便萌生了同样的想法。通过一番调试,终于实现了在树莓派上流畅播放落网电台音乐的功能,带来了全新的音乐享受体验。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有