C#正则表达式实例详解:完整指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

C# 中的正则表达式:Regex 类基础操作

正则表达式 (regex) 是一种强大的工具,用于根据指定模式搜索、提取、替换和验证字符串。在 C# (.NET) 中,所有正则表达式操作都集中在 System.Text.RegularExpressions 命名空间和核心类 Regex 中。本文将通过实际示例,讲解 C# 中正则表达式的基础和高级功能。

1. Regex 类:主要方法和模式创建

要在 C# 中使用正则表达式,您需要引入命名空间:

using System.Text.RegularExpressions;

Regex 类提供了几个关键方法:

  • IsMatch — 检查字符串是否包含与模式匹配的内容。
  • Match — 返回第一个匹配项。
  • Matches — 返回所有匹配项。
  • Replace — 将找到的匹配项替换为指定字符串。
  • Split — 根据匹配项拆分字符串。

一个简单的电子邮件地址验证示例:

string email = "user@example.com";
string pattern = @"^[\\w\\.-]+@[\\w\\.-]+\\.\\w+$";
bool isValid = Regex.IsMatch(email, pattern);
Console.WriteLine(isValid); // True

请注意字符串前的 @ 符号 — 这是逐字字符串 (verbatim string),可以简化模式中反斜杠 (\\) 的编写。

2. 数据搜索与提取:Match 和 Matches 方法

Match 方法返回一个 Match 对象,其中包含第一个匹配项的信息。如果没有匹配项,Success 属性将为 false。

从文本中提取电话号码的示例:

string text = "请拨打号码 +7 (123) 456-78-90 或 +7 (987) 654-32-10";
string pattern = @"\\+7\\s?\\(\\d{3}\\)\\s?\\d{3}-\\d{2}-\\d{2}";
MatchCollection matches = Regex.Matches(text, pattern);

foreach (Match match in matches)
{
    Console.WriteLine(match.Value);
}
// 输出:
// +7 (123) 456-78-90
// +7 (987) 654-32-10

Matches 方法返回所有匹配项的集合。您还可以使用捕获组来提取特定部分:

string text = "ID: 12345, 价格: 999.99";
string pattern = @"价格:\\s*(\\d+\\.?\\d*)";
Match match = Regex.Match(text, pattern);

if (match.Success)
{
    string price = match.Groups[1].Value;
    Console.WriteLine($"价格: {price}"); // 价格: 999.99
}

捕获组在模式中用圆括号 () 表示。第 0 组是整个匹配项,第 1 到第 N 组是捕获的子字符串。

3. 字符串替换与拆分:Replace 和 Split

Replace 方法允许灵活地替换匹配项。支持反向引用 ($1、$2 等) 来插入捕获的组。

将日期格式从 "YYYY-MM-DD" 转换为 "DD.MM.YYYY" 的示例:

string date = "2025-03-15";
string pattern = @"(\\d{4})-(\\d{2})-(\\d{2})";
string replacement = "$3.$2.$1";
string result = Regex.Replace(date, pattern, replacement);
Console.WriteLine(result); // 15.03.2025

Split 方法根据模式匹配项拆分字符串。这对于解析 CSV 或日志文件非常方便:

string data = "apple;banana;cherry;grape";
string pattern = @";";
string[] fruits = Regex.Split(data, pattern);
foreach (var fruit in fruits)
{
    Console.WriteLine(fruit);
}
// 输出:
// apple
// banana
// cherry
// grape

您还可以使用更复杂的分隔符,例如多个空格或标点符号:

string text = "一   二,三;四";
string[] parts = Regex.Split(                

博客

书籍推荐