# C#正则表达式Regex学习:从字符串匹配到数据提取

发布时间:2026/10/15 4:08:09

# C#正则表达式Regex学习:从字符串匹配到数据提取 一、什么是正则表达式在C#开发过程中经常需要对字符串进行处理例如判断手机号格式是否正确验证邮箱格式从字符串中提取指定数据替换字符串中的某些内容如果使用传统字符串方法例如Contains()判断是否包含某个字符串IndexOf()查找字符串位置Substring()截取字符串只能处理一些简单情况。当字符串规则比较复杂时例如手机号13812345678要求第一位必须是1第二位必须是3-9后面必须9位数字如果使用普通代码判断会比较繁琐。这时候就可以使用正则表达式。正则表达式Regular Expression简称Regex是一种通过规则描述字符串格式的方法。简单来说正则表达式就是使用一套规则快速判断和处理字符串。二、C#中的Regex类C#中提供了专门处理正则表达式的类System.Text.RegularExpressions其中最常用的方法方法作用Regex.IsMatch()判断字符串是否匹配Regex.Match()获取一个匹配结果Regex.Matches()获取多个匹配结果Regex.Replace()替换字符串内容三、Regex.IsMatch判断字符串是否满足规则Regex.IsMatch()主要作用判断一个字符串是否符合指定的正则规则。返回值true表示匹配成功。false表示匹配失败。例如判断字符串中是否包含数字stringtext123;boolresultRegex.IsMatch(text,\d);Console.WriteLine(result);运行结果True这里\d表示匹配任意一个数字。例如stringtextABC;boolresultRegex.IsMatch(text,\d);Console.WriteLine(result);运行结果False因为ABC里面没有数字。四、正则表达式中的数量匹配符在实际开发中经常需要判断某个字符出现多少次。正则表达式提供了几个常用符号符号含义*0次或者多次1次或者多次?0次或者1次{n}固定n次{n,m}出现n到m次1、*表示0次或者多次例如stringtextaaa;boolresultRegex.IsMatch(text,a*);Console.WriteLine(result);输出True其中a*表示字符a可以出现0次 1次 2次 多次所以aaa满足条件。2、表示至少出现一次代码stringtextaaa;boolresultRegex.IsMatch(text,a);Console.WriteLine(result);输出True其中a表示字符a必须出现至少一次。如果stringtexthello;boolresultRegex.IsMatch(text,a);Console.WriteLine(result);输出False原因要求至少存在一个a。3、?表示0次或者1次代码stringtextapple;boolresultRegex.IsMatch(text,a?);Console.WriteLine(result);输出True其中a?表示a可以出现0次 或者1次4、{}指定匹配次数例如匹配4个数字stringtext2026;boolresultRegex.IsMatch(text,\d{4});Console.WriteLine(result);输出True其中\d{4}表示连续匹配4个数字。例如2026符合要求。如果stringtext26;boolresultRegex.IsMatch(text,\d{4});Console.WriteLine(result);输出False因为数字不足4位。5、{n,m}范围匹配例如stringtext123;boolresultRegex.IsMatch(text,\d{2,4});Console.WriteLine(result);输出True表示数字长度必须2位到4位所以12 123 1234都满足。五、手机号验证案例实际开发中经常需要验证用户输入的数据格式。例如手机号码验证。规则第一位1 第二位3-9 后面9位数字 总共11位代码stringphone13812345678;stringpattern^1[3-9]\d{9}$;boolresultRegex.IsMatch(phone,pattern);Console.WriteLine(result);输出True正则表达式^1[3-9]\d{9}$拆开分析^表示开始。1表示第一位必须是1。[3-9]表示第二位必须是3到9。\d{9}表示后面9位数字。$表示结束。最终组成13812345678满足手机号规则。六、邮箱验证案例邮箱格式例如3313545707qq.com代码stringemail331354qq.com;stringpattern^[\w][a-zA-Z0-9]\.[a-zA-Z]$;boolresultRegex.IsMatch(email,pattern);Console.WriteLine(result);输出True其中表示邮箱分隔符。\w表示多个字母、数字或者下划线。\.表示匹配小数点。通过正则可以快速判断邮箱格式是否正确。七、Match提取字符串中的数据正则表达式不仅可以判断字符串。还可以从字符串中提取需要的数据。例如字符串订单编号:A20261001需要提取A20261001代码stringtext订单编号:A20261001;MatchmatchRegex.Match(text,A\d);Console.WriteLine(match.Value);输出A20261001解析A表示固定字符。\d表示一个或者多个数字。所以A20261001符合规则。八、Matches获取多个匹配结果如果字符串中存在多个目标可以使用Matches。例如stringtext产品A100 产品A200 产品A300;MatchCollectionmatchesRegex.Matches(text,A\d);foreach(Matchiteminmatches){Console.WriteLine(item.Value);}输出A100 A200 A300Matches可以一次获取所有符合规则的数据。九、Replace替换字符串Regex除了匹配和提取还可以替换字符串。例如删除字符串中的数字。原数据abc123代码stringtextabc123;stringresultRegex.Replace(text,\d,);Console.WriteLine(result);输出abc执行过程找到1 2 3替换为空。最终abc十、正则表达式在工业项目中的应用作为C#上位机开发人员正则表达式在实际项目中非常常见。1、PLC通信数据解析例如PLC发送TEMP:25.6可以使用Regex.Match(data,\d\.\d)提取25.62、串口数据处理设备发送ID:001 OK可以通过\d提取0013、机器视觉项目图片管理视觉检测保存图片NG_001.jpg NG_002.jpg可以使用NG_\d\.jpg判断NG图片。十一、总结通过学习C#正则表达式可以发现Regex是一种非常方便的字符串处理工具。它主要用于字符匹配数据验证数据提取字符替换常用方法方法作用IsMatch判断是否匹配Match获取一个结果Matches获取多个结果Replace替换内容在C#上位机开发、PLC通信、机器视觉项目中正则表达式可以帮助我们快速处理各种字符串数据。虽然正则表达式语法看起来比较复杂但是掌握常用规则以后可以大幅提高开发效率。
延伸阅读

更多相关文章

2026/10/15 4:08:09

Linux misc驱动实践

阅读了正点原子的《I.MX6U嵌入式Linux驱动开发指南》第五十七章Linux MISC驱动实验,了解到misc驱动也是字符设备驱动,并且嵌套在platform总线驱动中,既然前面学习了platform总线驱动的框架,所以决定在理解misc驱动原理后&#xff…

2026/10/15 4:08:09

优化开票任务Demo开发(章节2)

听起来很复杂像是ConcurrentHashMap把线程隔离开了,但其实就是创建了两个线程池,这两个线程池本来就是隔开的,跟ConcurrentHashMap没啥关系ConcurrentHashMap只是为了解决数据争用项目中通过一个Cache类,把用户的相关开票数据搬到…

2026/10/15 4:03:08

家长怎么远程控制孩子手机 家长控制孩子手机的方法

家长怎么远程控制孩子手机?很多家长日常工作忙碌,无法时刻陪伴孩子,难以实时掌握孩子的手机使用情况,管控十分被动。家长怎么远程控制孩子手机呢?无需复杂设备和繁琐设置,无界趣连2.0适配亲子远程管控场景&…

2026/10/15 5:18:12

河北工业大学Java期末复习题:25道选择题考点剖析

简介:河北工业大学Java期末考试复习题(部分答案)是一份面向该校Java课程本科生的期末备考资料,适用于考前集中复习、常见题型演练和查漏补缺,也可供任课教师出题或备课参考。资源包共包含1个doc文档,整体约…

2026/10/15 5:18:12

FileChannel深度解析:零拷贝与内存映射实战指南

在Java的NIO体系里,FileChannel是很多人学完Buffer之后第一个真正上手的通道类。它解决的问题很朴素:让文件的读写不再像传统IO那样一边读一边频繁拷贝,而是把文件抽象成一个可定位、可映射、可高效搬移的通道。作为整个NIO中唯一和本地文件系…

2026/10/15 5:18:12

分数阶Calderón问题贝叶斯反演:MCMC与MATLAB实现全解析

做反问题这些年,我发现一个特别有意思的共识:只要把经典算子换成分数阶,问题难度往往会跳一个台阶,但能解释的物理现象也瞬间丰富很多。分数阶Caldern问题就是这个方向的典型代表——它既要处理边界测量反演内部参数的经典难点&am…

2026/10/15 5:18:12

LLM推理性能测试指南:并发压测与指标归因实战

性能测试这件事,最怕的不是结果不好看,而是结果说不出为什么,换个环境就崩。上个月我把 vLLM 和 SGLang 两个推理引擎拉到一起做并发实验,前前后后折腾了两周,最后发现坑全不在引擎本身,而在实验设计和指标…

2026/10/15 5:18:12

一文搞懂分类问题:算法选型、评估指标与实战避坑

1. 分类问题到底在解决什么:先想清楚边界在哪很多人一上来就背模型:逻辑回归、决策树、SVM、随机森林……但真到项目里,第一个卡住的往往不是模型不会调,而是"这个问题到底该不该当成分类来做"。我见过不少同学把回归问…

2026/10/15 5:13:12

PostgreSQL生产库备份方案:Barman全量备份与WAL归档实战

很多DBA做PostgreSQL备份,第一反应就是写个 cron 脚本,定时调 pg_dump。这套逻辑在几十 GB 的小库上确实够用,但当你手里管着几百 GB 甚至上 TB 的生产库,还要回答“我能恢复到什么时间点”“备份到底能不能用”这两个问题时&…

2026/10/14 11:31:03

Python调用Gemini Structured Outputs实现工单路由门禁

客服工单最怕的不是模型“答错一句话”,而是它给出一段看起来合理的说明,程序却从中猜错优先级。通俗做法是:要求模型只交 JSON(JavaScript Object Notation,轻量数据格式),再让代码验证它。Gem…

2026/10/14 17:41:07

Spring Boot超市进销存系统毕设实战:从需求拆解到答辩通关

最近带的一个学生项目组里,有A同学跑来问我:选什么毕设题目最稳妥,既能让评审老师觉得工作量够,又不会在答辩时被问到语无伦次。我第一反应就是推荐基于Spring Boot的超市仓库管理系统——也就是超市进销存系统。这个题目乍一看平…

2026/10/14 2:32:55

Flutter StatefulWidget 生命周期核心解析

很多刚开始接触 Flutter 的朋友,在看完一堆“Hello World”和基础组件之后,大概率都会撞上同一堵墙:StatefulWidget 里那堆 initState、build、dispose 方法,到底什么时候被调用?为什么顺序是那样?在里面到…

2026/10/15 0:02:22

防关联浏览器哪个好?三款产品实测差异解析

新手做多店铺,最纠结的就是防关联浏览器选哪个。飞跨、网易、站斧这三款被问得最多,先给结论:要一体化省心、长期便宜,选站斧;要网易招牌和稳,选网易;预算紧做东南亚 Lazada,选飞跨。…

2026/10/15 0:02:22

影刀RPA深度实战:大模型Fine-tuning定制RPA专用Prompt与指令生成

影刀RPA深度实战:大模型Fine-tuning定制RPA专用Prompt与指令生成 一、技术背景 大模型(LLM)在通用场景下表现强大,但当我们将 GPT-4 或 Qwen 直接用于生成影刀RPA操作指令和 XPath 定位时,准确率通常只有 40%-60%。原因…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑