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

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视频教程)

版权声明:本文为Fighting_hawk原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。