捕获组和非捕获组
- 一. 捕获组(Capturing Groups)
- 二. 非捕获组(Non-Capturing Groups)
- 三. 区别
- 四. 选择使用
这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。
作者:神的孩子都在歌唱
一. 捕获组(Capturing Groups)
-
定义: 捕获组用于提取匹配的子字符串。它们会记住匹配的内容,允许你在后续的操作中引用这些内容。
-
语法: 使用圆括号
()
来定义捕获组。 -
用途: 适用于需要从匹配的文本中提取和使用某些部分的情况。例如,你可以从一个日期字符串中提取年、月、日。
-
示例:
(\d{4})-(\d{2})-(\d{2})
- 这个正则表达式可以用来匹配日期格式
YYYY-MM-DD
。它包含三个捕获组,分别用于提取年份、月份和日期。
import re pattern = re.compile(r"(\d{4})-(\d{2})-(\d{2})") match = pattern.search("2024-09-23") if match: print(match.group(1)) # 2024 print(match.group(2)) # 09 print(match.group(3)) # 23
- 这个正则表达式可以用来匹配日期格式
二. 非捕获组(Non-Capturing Groups)
-
定义: 非捕获组用于组织正则表达式中的模式,但不会记住匹配的内容。它们仅用于控制匹配的逻辑,而不会生成回溯。
-
语法: 使用
(?:...)
来定义非捕获组。 -
用途: 适用于需要分组以控制正则表达式的优先级,但不需要保存组内容的情况。例如,你可以使用非捕获组来指定选项或多重模式。
-
示例:
(?:\d{4})-(?:\d{2})-(?:\d{2})
- 这个正则表达式与上面的示例类似,但使用非捕获组来匹配日期。非捕获组不会保存匹配的内容,仅用于组织模式。
import re pattern = re.compile(r"(?:\d{4})-(?:\d{2})-(?:\d{2})") match = pattern.search("2024-09-23") if match: print("Match found!")
三. 区别
-
捕获:
- 捕获组会记住匹配的文本,允许你在后续操作中引用这些文本。
- 非捕获组不会记住匹配的文本,只是用于匹配逻辑上的分组。
-
性能:
- 捕获组会引入额外的开销,因为需要存储匹配的内容。
- 非捕获组通常具有更高的性能,尤其是在复杂模式中。
-
引用:
- 捕获组可以通过其组号引用,使用
group()
方法获取。 - 非捕获组不能被引用,因为它们不存储匹配的内容。
- 捕获组可以通过其组号引用,使用
四. 选择使用
- 使用捕获组: 当你需要从匹配的文本中提取和操作特定的子串时。
- 使用非捕获组: 当你只需要分组以控制模式的优先级,而不需要存储匹配内容时。
作者:神的孩子都在歌唱
本人博客:https://blog.csdn.net/weixin_46654114
转载说明:务必注明来源,附带本人博客连接。