C 语言

关注公众号 jb51net

关闭
首页 > 软件编程 > C 语言 > C#正则表达式

C#正则表达式从入门到实战完全指南

作者:bugcome_com

正则表达式是文本处理中的强大工具,它允许开发者定义搜索模式,以实现对字符串的匹配、查找、验证、分割和替换等操作,这篇文章主要介绍了C#正则表达式从入门到实战的相关资料,需要的朋友可以参考下

前言

在日常 .NET 开发中,**正则表达式(Regex)**是处理字符串的利器:数据校验、日志分析、文本替换、爬虫规则、接口参数验证……几乎无处不在。

本文将带你系统掌握 C# 中的正则表达式,包括:

一、什么是正则表达式?

正则表达式(Regular Expression)是一种用于匹配字符串模式的规则表达式。

在 C# 中,正则表达式由 .NET 框架中的

👉 System.Text.RegularExpressions.Regex 类提供支持。

使用命名空间:

using System.Text.RegularExpressions;

二、Regex 常用方法

方法说明
Regex.IsMatch()判断是否匹配
Regex.Matches()获取所有匹配结果
Regex.Match()获取第一个匹配
Regex.Replace()替换匹配内容
Regex.Split()按规则拆分字符串

三、正则表达式基础语法

字符类

表达式含义
\d数字
\D非数字
\w字母、数字、下划线
\W非单词字符
\s空白字符
.任意字符(除换行)
[abc]匹配 a/b/c
[^abc]不匹配 a/b/c

示例:

string input = "abc123";
bool result = Regex.IsMatch(input, @"\d+");
Console.WriteLine(result); // True

定位符

表达式含义
^字符串开始
$字符串结束
\b单词边界
\B非单词边界

示例:匹配以 S 开头的单词

string text = "A Thousand Splendid Suns";
MatchCollection matches = Regex.Matches(text, @"\bS\S*");

foreach (Match match in matches)
{
    Console.WriteLine(match.Value);
}

输出:

Splendid
Suns

量词(限定符)

表达式含义
*0次或多次
+1次或多次
?0或1次
{n}n次
{n,}至少n次
{n,m}n到m次

示例:匹配手机号

string pattern = @"^1\d{10}$";

四、分组与捕获(核心重点)

普通分组

(\w+)

示例:

string text = "one two";
string pattern = @"(\w+)\s(\w+)";
string result = Regex.Replace(text, pattern, "$2 $1");

Console.WriteLine(result); // two one

命名分组(推荐使用)

(?<name>pattern)

示例:

string text = "2025-03-04";
string pattern = @"(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})";

Match match = Regex.Match(text, pattern);

Console.WriteLine(match.Groups["year"].Value);
Console.WriteLine(match.Groups["month"].Value);
Console.WriteLine(match.Groups["day"].Value);

五、零宽断言(高级必会)

断言不会消耗字符,只判断位置。

正向先行断言

\w+(?=\.)

匹配 . 之前的内容

负向先行断言

\b(?!un)\w+\b

匹配不以 un 开头的单词

正向后行断言

(?<=19)\d{2}

示例:

string input = "1851 1999 1950 1905 2003";
string pattern = @"(?<=19)\d{2}\b";

foreach (Match match in Regex.Matches(input, pattern))
{
    Console.WriteLine(match.Value);
}

输出:

99
50
05

六、实战案例

案例1:去除多余空格

string input = "Hello   World   ";
string result = Regex.Replace(input, @"\s+", " ");

Console.WriteLine(result);

案例2:验证邮箱

string pattern = @"^[\w\.-]+@[\w\.-]+\.\w+$";

案例3:提取HTML标签内容

string pattern = @"<title>(.*?)</title>";

⚠️ 注意:复杂 HTML 不建议用正则,建议使用 HTML 解析器。

案例4:验证身份证号(简单版)

string pattern = @"^\d{17}[\dX]$";

七、性能优化建议(高级开发者必看)

预编译正则

Regex regex = new Regex(pattern, RegexOptions.Compiled);

适用于高频调用场景。

使用静态缓存

private static readonly Regex phoneRegex =
    new Regex(@"^1\d{10}$", RegexOptions.Compiled);

避免重复创建对象。

避免灾难性回溯

问题示例:

(a+)+

解决方法:

八、常见坑位总结

错误说明
忘记使用 @ 字符串转义错乱
.* 贪婪匹配过多应使用 .*?
正则写得过长建议拆分逻辑
复杂 HTML 用正则容易翻车

九、什么时候不该用正则?

正则适合做:

✔ 字符串校验
✔ 模式匹配
✔ 批量替换
✔ 日志分析

十、总结

C# 正则表达式核心掌握五点:

  1. 字符类
  2. 量词
  3. 分组
  4. 断言
  5. 替换

建议学习路径:

基础语法 → 分组 → 断言 → 实战 → 性能优化

结语

正则表达式不是洪水猛兽,而是一把利器。

写得好,是优雅。
写得烂,是灾难。

建议:

✔ 多写小例子练习
✔ 善用在线调试工具
✔ 养成写注释习惯

到此这篇关于C#正则表达式从入门到实战的文章就介绍到这了,更多相关C#正则表达式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文