上一篇: C# 命名空间(Namespace)

下一篇: C# 异常处理

C# 正则表达式

在本教程中,我们将学习C#中正则表达式的基本概念及其应用。

  1. 正则表达式简介
  2. System.Text.RegularExpressions命名空间
  3. 正则表达式基本语法
  4. 匹配和验证
  5. 捕获组和替换

正则表达式简介

正则表达式(Regular Expression)是一种描述字符模式的强大和灵活的工具。它们可以用于检查文本是否满足特定的模式(例如电子邮件地址),提取文本中的有用信息(例如 URL),或者替换和修改文本。

System.Text.RegularExpressions命名空间

C# 提供了一个名为 System.Text.RegularExpressions的命名空间,其中包含用于处理正则表达式的类。主要类有:

  • Regex:表示正则表达式,并提供匹配、搜索和替换功能。
  • Match:表示单个正则表达式匹配的结果。
  • Group:表示捕获组内的匹配结果。
  • Capture:表示单次捕获的结果。

首先,需要引入该命名空间:

                using System.Text.RegularExpressions;
                

正则表达式基本语法

正则表达式由一系列字符和操作符组成,用于描述要匹配的文本模式。以下是一些常用的正则表达式元素:

  • 字面字符:例如 a1#
  • 转义字符:以反斜杠(\)开始,表示特殊字符或动作,例如 \d 表示数字字符
  • 字符类:使用方括号([])定义,表示一个字符集合,例如 [aeiou] 表示任意元音字符
  • 量词:表示前面的元素重复的次数,例如 *(零次或多次)、+(一次或多次)或 {n,m}(至少 n 次,最多 m 次)
  • 锚定:表示字符串的开始(^)或结束($
  • 分组和捕获:使用圆括号(())将若干元素组合在一起,并可以捕获匹配的子字符串

匹配和验证

要检查一个字符串是否与正则表达式匹配,可以使用 Regex.IsMatch() 方法。

                string pattern = @"^\d{3}-\d{2}-\d{4}$";
                string input = "123-45-6789";
                bool isMatch = Regex.IsMatch(input, pattern);
                Console.WriteLine(isMatch); // 输出 "True"
                

捕获组和替换

正则表达式可以包含捕获组,这样可以在匹配时获取特定部分的内容。捕获组使用圆括号(())定义。

                string pattern = @"(\d{4})-(\d{2})-(\d{2})";
                string input = "2022-11-30";
                Match match = Regex.Match(input, pattern);

                if (match.Success)
                {
                    Console.WriteLine($"Year: {match.Groups[1].Value}");
                    Console.WriteLine($"Month: {match.Groups[2].Value}");
                    Console.WriteLine($"Day: {match.Groups[3].Value}");
                }
                

要替换文本中与正则表达式匹配的部分,可以使用 Regex.Replace() 方法。还可以通过引用捕获组来生成新的替换文本。

                string pattern = @"(\d{4})-(\d{2})-(\d{2})";
                string input = "Today is 2022-11-30.";
                string replacement = "$3/$2/$1";
                string result = Regex.Replace(input, pattern, replacement);
                Console.WriteLine(result); // 输出 "