正则中捕获组和非捕获组区别
这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。
作者:神的孩子都在歌唱
一. 捕获组(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
- 点赞
- 收藏
- 关注作者
评论(0)