1 概述
- 定义:在正则表达式中,以()建立正则表达式的内部分组,子组是正则表达式的一部分,可作为内部整体操作的对象。
- 操作符:
()。 - 下述例子中
findall()和search()函数的用法将在后续章节中分享其具体用法。
2 作用
- 可以被作为整体操作,改变元字符的操作对象。
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()) #输出 王者荣耀
- 可以通过编程语言某些接口获取匹配内容中,子组对应的内容部分。如以下例子,获取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 捕获组
- 含义:可以给正则表达式的子组取一个名字,表达该子组的意义,这种有名称的子组被称为捕获组。
- 格式:
(?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 注意事项
- 一个正则表达式可以包含多个子组;
- 子组可以嵌套,但是不要重叠或者嵌套结果复杂;
- 子组序号一般从外到内,从左到右计数。比如对于匹配模式
r'((ab)c)d(ef)',子组1是abc,子组2是ab,子组3是ef。
5 总结
- 子组的运算特点类似于四则运算中的括号,改变了计算顺序;
- 子组的匹配功能较为复杂,需要配合各个正则函数多多练习。
参考文献
版权声明:本文为Fighting_hawk原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。