
正则表达式Regular Expression简称Regex是一种用于匹配、查找、替换字符串的规则。在 C# 中正则表达式由System.Text.RegularExpressions命名空间提供。掌握 Regex 后可以轻松完成✔ 验证手机号✔ 验证邮箱✔ 提取数字✔ 查找指定字符串✔ 批量替换文本✔ 分割字符串✔ 解析日志✔ 数据清洗一、命名空间using System.Text.RegularExpressions;二、Regex 类最常用的是Regex类。常见方法方法作用IsMatch()是否匹配Match()获取第一个匹配Matches()获取所有匹配Replace()替换字符串Split()分割字符串Escape()转义特殊字符Unescape()取消转义三、最简单的例子判断字符串中是否包含数字。using System; using System.Text.RegularExpressions; class Program { static void Main() { string str abc123; bool result Regex.IsMatch(str, \d); Console.WriteLine(result); } }输出True因为\d表示数字。四、Regex.IsMatch()用于判断是否符合规则。语法Regex.IsMatch(字符串, 正则表达式)例如string phone 13812345678; bool result Regex.IsMatch(phone, ^1\d{10}$); Console.WriteLine(result);输出True解释^ 开始 1 第一位必须是1 \d 数字 {10} 后面10位 $ 结束五、Regex.Match()返回第一个匹配结果。例如string str abc123xyz456; Match match Regex.Match(str, \d); Console.WriteLine(match.Value);输出123说明\d表示一个或多个数字。Match 常用属性match.Value匹配内容match.Index开始位置match.Length长度例如Console.WriteLine(match.Value); Console.WriteLine(match.Index); Console.WriteLine(match.Length);输出123 3 3六、Regex.Matches()获取所有匹配。例如string str abc123xyz456aaa789; MatchCollection mc Regex.Matches(str, \d); foreach (Match item in mc) { Console.WriteLine(item.Value); }输出123 456 789七、Regex.Replace()替换。例如把所有数字替换成 *string str abc123xyz456; string result Regex.Replace(str, \d, *); Console.WriteLine(result);输出abc***xyz***替换整个数字string result Regex.Replace(str, \d, ***);输出abc***xyz***八、Regex.Split()按规则切割。例如string str 张三,李四;王五|赵六; string[] arr Regex.Split(str, [,;|]); foreach (string s in arr) { Console.WriteLine(s); }输出张三 李四 王五 赵六九、常用元字符1、匹配任意字符除换行。Regex.IsMatch(abc, a.c)结果True2、\d数字0~9例如1233、\D非数字abc4、\w字母数字下划线即A-Z a-z 0-9 _5、\W非单词字符。6、\s空白字符。包括空格 Tab 换行7、\S非空白。8、^开始例如^abc必须以 abc 开头。9、$结束abc$必须以 abc 结尾。10、[]字符集合。例如[abc]匹配a b c例如Regex.IsMatch(apple, [abc])结果True11、[^]取反[^0-9]不是数字。12、|或者cat|dog匹配cat dog十、数量词*0 次或多次ab*可以匹配a ab abb abbb1 次或多次ab匹配ab abb?0 次或1次colou?r匹配color colour{n}指定次数\d{6}6 位数字。{m,n}范围\d{6,10}6~10 位数字。{m,}至少 m 次a{3,}至少三个 a。十一、分组 ()例如string str 2026-07-10; Match m Regex.Match(str, (\d{4})-(\d{2})-(\d{2})); Console.WriteLine(m.Groups[1].Value); Console.WriteLine(m.Groups[2].Value); Console.WriteLine(m.Groups[3].Value);输出2026 07 10Groups0 整个匹配 1 第一组 2 第二组十二、常见验证手机号^1\d{10}$邮箱^[\w.-][\w.-]\.[A-Za-z]{2,}$身份证18位基础格式^\d{17}[\dXx]$该表达式只校验基本格式不校验行政区划、出生日期或校验码。QQ^[1-9]\d{4,10}$用户名6~20 位字母数字下划线^\w{6,20}$密码8~20 位必须包含大小写字母和数字^(?.*[a-z])(?.*[A-Z])(?.*\d).{8,20}$十三、RegexOptions匹配选项Regex.IsMatch( ABC, abc, RegexOptions.IgnoreCase);常见选项选项说明IgnoreCase忽略大小写Multiline多行模式^、$匹配每行Singleline单行模式.可匹配换行Compiled编译正则提高重复使用性能首次创建开销略高CultureInvariant与区域性无关的匹配十四、逐字字符串建议写正则时使用\d而不是\\d这样无需对反斜杠进行二次转义可读性更高。十五、实战案例1. 提取所有邮箱string text tomtest.com jackqq.com abc163.com; MatchCollection mc Regex.Matches( text, [\w.-][\w.-]\.[A-Za-z]{2,}); foreach (Match m in mc) { Console.WriteLine(m.Value); }输出tomtest.com jackqq.com abc163.com2. 隐藏手机号中间四位string phone 13812345678; string result Regex.Replace( phone, (\d{3})\d{4}(\d{4}), $1****$2); Console.WriteLine(result);输出138****56783. 删除所有 HTML 标签string html pHello bWorld/b/p; string text Regex.Replace(html, .*?, ); Console.WriteLine(text);输出Hello World注意对于复杂 HTML不建议使用正则解析应使用专门的 HTML 解析库如 Html Agility Pack。十六、学习建议建议按以下顺序掌握正则表达式基础语法字符、字符集、数量词、锚点^、$。Regex 常用方法IsMatch()、Match()、Matches()、Replace()、Split()。进阶特性分组、命名分组、反向引用、零宽断言前瞻/后顾、贪婪与懒惰匹配。性能优化预编译Regex、避免灾难性回溯、设置超时时间适用于处理不可信输入。总结方法用途返回值Regex.IsMatch()判断是否匹配boolRegex.Match()获取第一个匹配MatchRegex.Matches()获取全部匹配MatchCollectionRegex.Replace()替换内容stringRegex.Split()按规则分割string[]Regex.Escape()转义特殊字符stringRegex.Unescape()取消转义string熟练掌握正则表达式后在 C# 中处理文本、日志、配置文件、表单验证、数据清洗和批量替换等场景都会更加高效