本文实例讲述了Python正则表达式分组概念与用法。分享给大家供大家参考,具体如下:

正则表达式分组
分组就是用一对圆括号“()”括起来的正则表达式,匹配出的内容就表示一个分组。从正则表达式的左边开始看,看到的第一个左括号“(”表示第一个分组,第二个表示第二个分组,依次类推,需要注意的是,有一个隐含的全局分组(就是0),就是整个正则表达式。
分完组以后,要想获得某个分组的内容,直接使用group(num)和groups()函数去直接提取就行。
例如:提取代码中的超链接中的文本
>>> s='<div><a href="https://support.google.com/chrome/?p=ui_hotword_search" rel="external nofollow" target="_blank">更多</a><p>dfsl</p></div>' >>> print re.search(r'<a.*>(.*)</a>',s).group(1) 更多
或者
>>> print re.match(r'.*<a.*>(.*)</a>',s).group(1) 更多
按照上面的分组匹配以后,我们就可以拿到我们想拿到的字串,但是如果我们正则表达式中括号比较多,那我们在拿我们想要的字串时,要去挨个数我们想要的字串时第几个括号,这样会很麻烦,这个时候Python又引入了另一种分组,那就是命名分组,上面的叫无名分组。
命名分组
命名分组就是给具有默认分组编号的组另外再给一个别名。命名分组的语法格式如下:
(?P<name>正则表达式)#name是一个合法的标识符
如:提取字符串中的ip地址
>>> s = "ip='230.192.168.78',version='1.0.0'"
>>> re.search(r"ip='(?P<ip>\d+\.\d+\.\d+\.\d+).*", s)
>>> res.group('ip')#通过命名分组引用分组
'230.192.168.78'
后向引用
正则表达式中,放在圆括号“()”中的表示是一个组。然后你可以对整个组使用一些正则操作,例如重复操作符。
要注意的是,只有圆括号”()”才能用于形成组。”“用于定义字符集。”{}”用于定义重复操作。
当用”()”定义了一个正则表达式组后,正则引擎则会把被匹配的组按照顺序编号,存入缓存。这样我们想在后面对已经匹配过的内容进行引用时,就可以用”\数字”的方式或者是通过命名分组进行”(?P=name)“进行引用。\1表示引用第一个分组,\2引用第二个分组,以此类推,\n引用第n个组。而\0则引用整个被匹配的正则表达式本身。这些引用都必须是在正则表达式中才有效,用于匹配一些重复的字符串。
如:
#通过命名分组进行后向引用
>>> re.search(r'(?P<name>go)\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)
后向肯定断言的语法:
(?<=pattern)
需要注意的是,如果在匹配的过程中,需要同时用到前向肯定断言和后向肯定断言,那么必须将后向肯定断言写在正则语句的前面,前向肯定断言写在正则语句的后面,表示后向肯定模式之后,前行肯定模式之前。
如:获取c语言代码中的注释内容
>>> s1='''char *a="hello world"; char b='c'; /* this is comment */ int c=1; /* t his is multiline comment */''' >>> re.findall( r'(?<=/\*).+?(?=\*/)' , s1 ,re.M|re.S) [' this is comment ', ' this is multiline comment ']
(?<=/*)这个是后向肯定断言,表示“/*”之后。(?=*/)这个为前向肯定断言,表示“*/”之前,这两合并起来就是一个区间了,所以后向肯定断言放在前向肯定断言前面。
前向否定断言、后向否定断言
前向否定断言语法:
(?!pattern)
后向否定断言语法:
(?<!pattern)
前向否定和后向否定实例:
#提取不是.txt结尾的文件 >>> f1 = 'aaa.txt' >>> re.findall(r'.*\..*$(?<!txt$)',f1) [] #提取不以数字开头的文件 >>> re.findall(r'^(?!\d+).*','1txt.txt') [] #提取不以数字开头不以py结尾的文件 >>> re.findall(r'^(?!\d+).+?\..*$(?<!py$)','test.py') [] >>> re.findall(r'^(?!\d+).+?\..*$(?<!py$)','test.txt') ['test.txt']
PS:这里再为大家提供2款非常方便的正则表达式工具供大家参考使用:
JavaScript正则表达式在线测试工具:
http://tools./regex/javascript
正则表达式在线生成工具:
http://tools./regex/create_reg
更多关于Python相关内容可查看本站专题:《Python正则表达式用法总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。
# Python
# 正则表达式
# 分组
# Python re正则表达式元字符分组()用法分享
# python使用正则表达式替换匹配成功的组并输出替换的次数
# python使用正则表达式替换匹配成功的组
# python里使用正则表达式的组嵌套实例详解
# 详解python里使用正则表达式的分组命名方式
# 在python中使用正则表达式查找可嵌套字符串组
# Python正则表达式中的量词符号与组问题小结
# 后向
# 前向
# 的是
# 第一个
# 第二个
# 是一个
# 不以
# 放在
# 字串
# 写在
# 需要注意
# 进阶
# 操作技巧
# 几个
# 是在
# 相关内容
# 可以用
# 要去
# 以此类推
相关文章:
如何通过万网虚拟主机快速搭建网站?
python的本地网站制作,如何创建本地站点?
如何用景安虚拟主机手机版绑定域名建站?
建站之星CMS建站配置指南:模板选择与SEO优化技巧
网站网页制作专业公司,怎样制作自己的网页?
C#如何使用XPathNavigator高效查询XML
制作企业网站建设方案,怎样建设一个公司网站?
招贴海报怎么做,什么是海报招贴?
企业微网站怎么做,公司网站和公众号有什么区别?
青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?
如何用狗爹虚拟主机快速搭建网站?
Python如何创建带属性的XML节点
如何快速配置高效服务器建站软件?
小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化
建站之星如何一键生成手机站?
建站主机数据库如何配置才能提升网站性能?
电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的?
实例解析angularjs的filter过滤器
北京建设网站制作公司,北京古代建筑博物馆预约官网?
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
制作宣传网站的软件,小红书可以宣传网站吗?
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
表情包在线制作网站免费,表情包怎么弄?
广州顶尖建站服务:企业官网建设与SEO优化一体化方案
做企业网站制作流程,企业网站制作基本流程有哪些?
建站之星北京办公室:智能建站系统与小程序生成方案解析
广州网站建站公司选择指南:建站流程与SEO优化关键词解析
如何快速建站并高效导出源代码?
全景视频制作网站有哪些,全景图怎么做成网页?
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
香港服务器建站指南:免备案优势与SEO优化技巧全解析
建站DNS解析失败?如何正确配置域名服务器?
广州建站公司哪家好?十大优质服务商推荐
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
深圳网站制作案例,网页的相关名词有哪些?
南平网站制作公司,2025年南平市事业单位报名时间?
清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?
内部网站制作流程,如何建立公司内部网站?
如何规划企业建站流程的关键步骤?
沈阳制作网站公司排名,沈阳装饰协会官方网站?
攀枝花网站建设,攀枝花营业执照网上怎么年审?
建站之星Pro快速搭建教程:模板选择与功能配置指南
建站之星后台管理如何实现高效配置?
定制建站如何定义?其核心优势是什么?
建站主机如何安装配置?新手必看操作指南
宝塔新建站点为何无法访问?如何排查?
天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?
相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?
如何在阿里云虚拟主机上快速搭建个人网站?
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
*请认真填写需求信息,我们会在24小时内与您取得联系。