跳到主要内容

C# 正则表达式

正则表达式(Regular Expression,简称 Regex)是一种强大的工具,用于在文本中搜索、匹配和替换特定模式的字符串。在 C# 中,正则表达式通过 System.Text.RegularExpressions 命名空间提供支持。本文将带你从基础开始,逐步掌握如何在 C# 中使用正则表达式。

什么是正则表达式?

正则表达式是一种描述字符串模式的语法。它由一系列字符和特殊符号组成,用于定义搜索模式。通过正则表达式,你可以轻松地验证输入、提取数据或替换文本中的特定部分。

在 C# 中,正则表达式的核心类是 Regex。它提供了匹配、替换和分割字符串的方法。

基本语法

正则表达式的语法由普通字符(如字母和数字)和元字符(如 .*+ 等)组成。以下是一些常见的元字符及其含义:

  • .:匹配任意单个字符(除了换行符)。
  • *:匹配前面的字符零次或多次。
  • +:匹配前面的字符一次或多次。
  • ?:匹配前面的字符零次或一次。
  • \d:匹配一个数字字符(等价于 [0-9])。
  • \w:匹配一个单词字符(字母、数字或下划线)。
  • \s:匹配一个空白字符(空格、制表符等)。
  • ^:匹配字符串的开头。
  • $:匹配字符串的结尾。
提示

正则表达式是区分大小写的。如果你希望忽略大小写,可以使用 RegexOptions.IgnoreCase 选项。

在 C# 中使用正则表达式

1. 创建正则表达式

在 C# 中,你可以通过 Regex 类来创建和使用正则表达式。以下是一个简单的示例,展示如何匹配一个字符串是否包含数字:

csharp
using System;
using System.Text.RegularExpressions;

class Program
{
static void Main()
{
string input = "Hello123World";
string pattern = @"\d+"; // 匹配一个或多个数字

bool isMatch = Regex.IsMatch(input, pattern);
Console.WriteLine(isMatch); // 输出: True
}
}

2. 提取匹配的内容

除了检查是否匹配,你还可以使用 Regex.MatchRegex.Matches 方法来提取匹配的内容。以下示例展示了如何提取字符串中的所有数字:

csharp
using System;
using System.Text.RegularExpressions;

class Program
{
static void Main()
{
string input = "Hello123World456";
string pattern = @"\d+"; // 匹配一个或多个数字

MatchCollection matches = Regex.Matches(input, pattern);
foreach (Match match in matches)
{
Console.WriteLine(match.Value); // 输出: 123 和 456
}
}
}

3. 替换字符串

你可以使用 Regex.Replace 方法来替换字符串中符合正则表达式模式的部分。以下示例展示了如何将字符串中的所有数字替换为 #

csharp
using System;
using System.Text.RegularExpressions;

class Program
{
static void Main()
{
string input = "Hello123World456";
string pattern = @"\d+"; // 匹配一个或多个数字

string result = Regex.Replace(input, pattern, "#");
Console.WriteLine(result); // 输出: Hello#World#
}
}

实际应用场景

1. 验证电子邮件地址

正则表达式常用于验证用户输入的数据格式。例如,以下代码展示了如何使用正则表达式验证电子邮件地址:

csharp
using System;
using System.Text.RegularExpressions;

class Program
{
static void Main()
{
string email = "example@example.com";
string pattern = @"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$";

bool isValid = Regex.IsMatch(email, pattern);
Console.WriteLine(isValid); // 输出: True
}
}

2. 提取 URL 中的域名

你可以使用正则表达式从 URL 中提取域名。以下示例展示了如何实现这一点:

csharp
using System;
using System.Text.RegularExpressions;

class Program
{
static void Main()
{
string url = "https://www.example.com/path/to/resource";
string pattern = @"https?://([^/]+)";

Match match = Regex.Match(url, pattern);
if (match.Success)
{
Console.WriteLine(match.Groups[1].Value); // 输出: www.example.com
}
}
}

总结

正则表达式是处理字符串的强大工具,尤其在需要匹配、提取或替换特定模式时非常有用。通过本文的学习,你应该已经掌握了 C# 中正则表达式的基本用法,并能够在实际项目中应用它们。

备注

正则表达式的语法非常灵活,但也可能变得复杂。建议在编写复杂的正则表达式时,使用在线工具(如 regex101.com)进行测试和调试。

附加资源与练习

  1. 练习:尝试编写一个正则表达式来验证电话号码的格式(例如 (123) 456-7890)。
  2. 深入学习:阅读 Microsoft 官方文档 以了解更多高级用法和性能优化技巧。
  3. 挑战:编写一个程序,从一段文本中提取所有的日期(格式为 YYYY-MM-DD)。

祝你学习愉快!