C# 正则表达式
正则表达式(Regular Expression,简称 Regex)是一种强大的工具,用于在文本中搜索、匹配和替换特定模式的字符串。在 C# 中,正则表达式通过 System.Text.RegularExpressions
命名空间提供支持。本文将带你从基础开始,逐步掌握如何在 C# 中使用正则表达式。
什么是正则表达式?
正则表达式是一种描述字符串模式的语法。它由一系列字符和特殊符号组成,用于定义搜索模式。通过正则表达式,你可以轻松地验证输入、提取数据或替换文本中的特定部分。
在 C# 中,正则表达式的核心类是 Regex
。它提供了匹配、替换和分割字符串的方法。
基本语法
正则表达式的语法由普通字符(如字母和数字)和元字符(如 .
、*
、+
等)组成。以下是一些常见的元字符及其含义:
.
:匹配任意单个字符(除了换行符)。*
:匹配前面的字符零次或多次。+
:匹配前面的字符一次或多次。?
:匹配前面的字符零次或一次。\d
:匹配一个数字字符(等价于[0-9]
)。\w
:匹配一个单词字符(字母、数字或下划线)。\s
:匹配一个空白字符(空格、制表符等)。^
:匹配字符串的开头。$
:匹配字符串的结尾。
正则表达式是区分大小写的。如果你希望忽略大小写,可以使用 RegexOptions.IgnoreCase
选项。
在 C# 中使用正则表达式
1. 创建正则表达式
在 C# 中,你可以通过 Regex
类来创建和使用正则表达式。以下是一个简单的示例,展示如何匹配一个字符串是否包含数字:
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.Match
或 Regex.Matches
方法来提取匹配的内容。以下示例展示了如何提取字符串中的所有数字:
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
方法来替换字符串中符合正则表达式模式的部分。以下示例展示了如何将字符串中的所有数字替换为 #
:
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. 验证电子邮件地址
正则表达式常用于验证用户输入的数据格式。例如,以下代码展示了如何使用正则表达式验证电子邮件地址:
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 中提取域名。以下示例展示了如何实现这一点:
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)进行测试和调试。
附加资源与练习
- 练习:尝试编写一个正则表达式来验证电话号码的格式(例如
(123) 456-7890
)。 - 深入学习:阅读 Microsoft 官方文档 以了解更多高级用法和性能优化技巧。
- 挑战:编写一个程序,从一段文本中提取所有的日期(格式为
YYYY-MM-DD
)。
祝你学习愉快!