捕获组(Capture Group)是正则表达式中的一个功能,用于提取匹配的子字符串。其核心作用是将正则表达式中的特定部分标记为可提取的单元,便于后续处理(如赋值、替换等)
捕获组的基本语法
语法:使用括号 () 包裹要提取的模式。
示例:(\d+) 捕获一个或多个数字。
捕获组的作用提取数据:从匹配结果中分离出关键信息。
分组处理:对复杂模式进行分段解析。
引用使用:在替换操作中重用捕获内容。
# 基本捕获
Regex.Match("Rx 123:", @"Rx\s+(\d+):")
匹配结果:
match.Groups[1].Value 返回 "123"。
应用场景:从日志中提取指令编号。
多组捕获
Regex.Match("User: John, Age: 30", @"User:\s+(\w+),\s+Age:\s+(\d+)")
匹配结果:
match.Groups[1].Value 返回 "John"。
match.Groups[2].Value 返回 "30"。
应用场景:解析用户信息。
命名捕获(高级用法)
Regex.Match("2023-10-05", @"(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})")
匹配结果:
match.Groups["year"].Value 返回 "2023"。
match.Groups["month"].Value 返回 "10"。
优势:通过名称引用,提高代码可读性。
- 注意事项
- 索引规则:捕获组从1开始计数(Groups[0] 是整个匹配)。
- 非捕获组:使用 (?:...) 可匹配但不捕获内容(如 (?:\s+))。
- 嵌套捕获:多层括号可嵌套,需按层级索引(如 Groups[1][2])。