【python之re模块学习第4天】正则表达式的应用:分组

本文详细介绍了正则表达式中内部分组的概念,如何使用()创建子组,并展示了通过findall()和search()函数利用捕获组进行复杂匹配和内容提取的应用实例。特别强调了捕获组的作用,注意事项以及子组在实际编程中的重要性。
摘要由CSDN通过智能技术生成

1 概述

  1. 定义:在正则表达式中,以()建立正则表达式的内部分组,子组是正则表达式的一部分,可作为内部整体操作的对象。
  2. 操作符:()
  3. 下述例子中findall()search()函数的用法将在后续章节中分享其具体用法。

2 作用

  1. 可以被作为整体操作,改变元字符的操作对象。
import re
print(re.findall(r'(ab)+','ababcde'))						#输出['ab']
print(re.search(r'(ab)+','ababcde').group())				#输出abab
# 匹配姓王或姓李的名
print(re.findall(r'王|李\w{1,3}','李时珍,王者荣耀'))			#输出['李时珍', '王']
print(re.findall(r'(王|李)\w{1,3}','李时珍,王者荣耀'))		#输出['李', '王']
print(re.findall(r'((王|李)\w{1,3})','李时珍,王者荣耀'))		#输出[('李时珍', '李'), ('王者荣耀', '王')]
print(re.search(r'(王|李)\w{1,3}','李时珍,王者荣耀').group())	#输出 李时珍
print(re.search(r'(王|李)\w{1,3}','王者荣耀,李时珍').group())	#输出 王者荣耀
  1. 可以通过编程语言某些接口获取匹配内容中,子组对应的内容部分。如以下例子,获取url协议类型。
import re
print(re.search(r'(https|http|ftp|file)://\S+',"https://www.baidu.com")group())		#输出 https://www.baidu.com
print(re.search(r'(https|http|ftp|file)://\S+',"https://www.baidu.com").group(1))	#输出 https

3 捕获组

  1. 含义:可以给正则表达式的子组取一个名字,表达该子组的意义,这种有名称的子组被称为捕获组。
  2. 格式:(?P<name>pattern)
import re
print(re.search(r'(?P<pig>ab)+','abababab').group())			#输出 abababab
print(re.search(r'(?P<pig>ab)+','abababab').group('pig'))		#输出 ab

4 注意事项

  1. 一个正则表达式可以包含多个子组;
  2. 子组可以嵌套,但是不要重叠或者嵌套结果复杂;
  3. 子组序号一般从外到内,从左到右计数。比如对于匹配模式r'((ab)c)d(ef)',子组1是abc,子组2是ab,子组3是ef。

5 总结

  1. 子组的运算特点类似于四则运算中的括号,改变了计算顺序;
  2. 子组的匹配功能较为复杂,需要配合各个正则函数多多练习。

参考文献

  1. RE正则表达式模块(Python视频教程)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值