在日常开发中,我们经常需要从文本中提取特定格式的数据,比如邮箱、电话号码、日期或自定义格式的字符串。C# 中的正则表达式(Regular Expression)提供了一种强大而灵活的方式来完成这项任务。其中,分组捕获是正则表达式的核心功能之一,能帮助我们精准地提取所需信息。
在正则表达式中,使用圆括号 () 可以将一部分模式“分组”。这些分组不仅可以用于逻辑控制(如重复、选择),还能捕获匹配到的子字符串,供后续使用。这就是所谓的“分组捕获”。
例如,正则表达式 (\d{4})-(\d{2})-(\d{2}) 可以匹配形如 2024-05-20 的日期,并将年、月、日分别捕获到三个不同的组中。
在 C# 中,我们主要通过 System.Text.RegularExpressions 命名空间下的 Regex 类来操作正则表达式。下面是一个完整的示例:
using System;using System.Text.RegularExpressions;class Program{ static void Main() { // 示例文本:包含姓名和邮箱 string input = "联系人:张三 <zhangsan@example.com>,李四 <lisi@test.org>"; // 正则表达式:捕获姓名和邮箱 string pattern = @"(\S+)\s+<([\w.-]+@[\w.-]+\.\w+)>"; // 使用 Matches 获取所有匹配项 MatchCollection matches = Regex.Matches(input, pattern); foreach (Match match in matches) { // Group[0] 是整个匹配,Group[1] 是第一个分组(姓名),Group[2] 是第二个分组(邮箱) Console.WriteLine($"姓名: {match.Groups[1].Value}, 邮箱: {match.Groups[2].Value}"); } }}
运行结果:
姓名: 张三, 邮箱: zhangsan@example.com姓名: 李四, 邮箱: lisi@test.org
除了按索引访问分组(如 Groups[1]),C# 还支持命名分组。通过 (?<name>...) 语法,我们可以给分组起一个名字,提高代码可读性。
string pattern = @"(?<name>\S+)\s+<(?<email>[\w.-]+@[\w.-]+\.\w+)>";Match match = Regex.Match(input, pattern);if (match.Success){ Console.WriteLine($"姓名: {match.Groups["name"].Value}, 邮箱: {match.Groups["email"].Value}");}
@"..." 字符串字面量可避免过多转义反斜杠Groups[0] 表示整个匹配(?:...) 可用于逻辑分组但不保存匹配内容,提升性能掌握 C#正则表达式 的分组捕获技巧,能让你在处理文本数据时事半功倍。无论是做 数据提取、日志分析还是表单验证,这项技能都极为实用。希望这篇 正则表达式教程 能帮助你轻松上手 C#数据提取 的核心方法!
—— 学会分组,让正则为你所用 ——
本文由主机测评网于2025-12-25发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://vpshk.cn/20251212582.html