C# 正则表达式详解 正则表达式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# 中处理文本、日志、配置文件、表单验证、数据清洗和批量替换等场景都会更加高效

相关新闻

最新新闻

SerenityOS 命令行选项解析指南:getopt 与 getopt_long 用法、返回值与底层实现

SerenityOS 命令行选项解析指南:getopt 与 getopt_long 用法、返回值与底层实现

SerenityOS 命令行选项解析指南:getopt 与 getopt_long 用法、返回值与底层实现 【免费下载链接】serenity The Serenity Operating System 🐞 项目地址: https://gitcode.com/GitHub_Trending/se/serenity 导读 本文以 getopt(3) 手册 为核心&a…

2026/10/6 14:10:51
轻量服务器还是ECS?大促云服务器选购与避坑实战指南

轻量服务器还是ECS?大促云服务器选购与避坑实战指南

每年大促节点,群里永远有人在问同一个问题:“38元的轻量服务器到底怎么抢?为什么我每次点进去都是已售罄?68元直购和99元的ECS我到底选哪个?”作为一个常年帮团队和自己采购云服务器的老用户,我太清楚这种纠…

2026/10/6 12:50:27
为 AI 代理的 Review 动作编写 Cedar 审批门控策略:review-agent-governance 策略编写实战指南

为 AI 代理的 Review 动作编写 Cedar 审批门控策略:review-agent-governance 策略编写实战指南

为 AI 代理的 Review 动作编写 Cedar 审批门控策略:review-agent-governance 策略编写实战指南 【免费下载链接】agents Multi-harness agentic plugin marketplace for Claude Code, Codex, Cursor, OpenCode, GitHub Copilot, and Google Antigravity 项目地址:…

2026/10/5 19:39:38
PaddleOCR 手写数学公式识别算法 CAN 实战指南:Counting-Aware Network 训练、评估与推理部署

PaddleOCR 手写数学公式识别算法 CAN 实战指南:Counting-Aware Network 训练、评估与推理部署

PaddleOCR 手写数学公式识别算法 CAN 实战指南:Counting-Aware Network 训练、评估与推理部署 【免费下载链接】PaddleOCR Turn any PDF or image document into structured data for your AI. A powerful, lightweight OCR toolkit that bridges the gap between i…

2026/10/5 16:06:34
Spring源码解析:构造器注入的类型转换与候选匹配机制

Spring源码解析:构造器注入的类型转换与候选匹配机制

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 12:44:38
openai-agents-python 多模型接入指南:深入解析 AnyLLMModel 适配层与 any-llm 路由

openai-agents-python 多模型接入指南:深入解析 AnyLLMModel 适配层与 any-llm 路由

openai-agents-python 多模型接入指南:深入解析 AnyLLMModel 适配层与 any-llm 路由 【免费下载链接】openai-agents-python A lightweight, powerful framework for multi-agent workflows 项目地址: https://gitcode.com/GitHub_Trending/op/openai-agents-pyth…

2026/10/6 12:38:14

日新闻

周新闻

月新闻