编辑
2025-09-24
C#
00

目录

中的正则表达式分组和捕获,并通过多个示例来展示其强大的功能。
分组
示例:使用分组进行匹配
捕获
示例:捕获分组中的文本
命名分组
示例:使用命名分组
非捕获分组
示例:使用非捕获分组
结论
项目中使用分组和捕获进行模式匹配。

在 C# 中,正则表达式不仅仅是用来检查字符串是否符合特定模式,它们还可以用于提取、操作和替换字符串中的子字符串。这是通过正则表达式中的“分组”和“捕获”功能实现的。本文将详细介绍 C# 中的正则表达式分组和捕获,并通过多个示例来展示其强大的功能。

分组

分组是通过将一部分正则表达式括在圆括号 () 内来创建的。这允许你将多个字符视为单个单元,并对它们应用量词,或者从匹配的字符串中提取信息。

示例:使用分组进行匹配

C#
using System; using System.Text.RegularExpressions; class Program { static void Main() { string pattern = "(dog|cat|fish)"; string input = "I have a dog, a cat, and a goldfish."; foreach (Match match in Regex.Matches(input, pattern)) { Console.WriteLine($"Found a pet: {match.Value}"); } } }

输出:

C#
Found a pet: dog Found a pet: cat Found a pet: fish

image.png

捕获

捕获是正则表达式的一个功能,它允许你在匹配过程中提取分组中的文本。在 C# 中,你可以通过 Match 对象的 Groups 属性访问这些捕获。

示例:捕获分组中的文本

C#
using System; using System.Text.RegularExpressions; class Program { static void Main() { string pattern = "Name: (\\w+), Age: (\\d+)"; string input = "Name: John, Age: 30\nName: Jane, Age: 25"; foreach (Match match in Regex.Matches(input, pattern)) { Console.WriteLine($"Name: {match.Groups[1].Value}, Age: {match.Groups[2].Value}"); } } }

输出:

C#
Name: John, Age: 30 Name: Jane, Age: 25

image.png

命名分组

在 C# 中,你还可以给分组命名,这使得代码更具可读性并且更容易维护。命名分组使用 (?<name>...) 语法。

示例:使用命名分组

C#
using System; using System.Text.RegularExpressions; class Program { static void Main() { string pattern = "Name: (?<name>\\w+), Age: (?<age>\\d+)"; string input = "Name: John, Age: 30\nName: Jane, Age: 25"; foreach (Match match in Regex.Matches(input, pattern)) { Console.WriteLine($"Name: {match.Groups["name"].Value}, Age: {match.Groups["age"].Value}"); } } }

输出:

C#
Name: John, Age: 30 Name: Jane, Age: 25

image.png

非捕获分组

有时候,你可能想要使用分组的功能,但并不想捕获分组中的内容。在这种情况下,你可以使用非捕获分组 (?:...)

示例:使用非捕获分组

C#
using System; using System.Text.RegularExpressions; class Program { static void Main() { string pattern = "Name: (?:\\w+), Age: (\\d+)"; string input = "Name: John, Age: 30\nName: Jane, Age: 25"; foreach (Match match in Regex.Matches(input, pattern)) { Console.WriteLine($"Age: {match.Groups[1].Value}"); } } }

输出:

C#
Age: 30 Age: 25

image.png

结论

分组和捕获是 C# 正则表达式中的重要概念,它们使得正则表达式不仅能够匹配文本,还能够提取和操作文本。通过使用命名分组,你可以编写更清晰、更易于维护的代码。非捕获分组则允许你优化性能,只捕获你需要的部分。以上示例应该能够帮助你开始在自己的 C# 项目中使用分组和捕获进行模式匹配。

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!