当前位置: 首页 > web >正文

【C#】正则表达式

一、核心优势

用一小段规则搞定大量复杂的字符串匹配,查找和替换,并且可移植可复用。


使用正则表达式的好处:

1. 强大且灵活:可以一次性匹配非常复杂的规则,比如验证邮箱、提取特定的格式日志、解析URL;

2. 跨语言:

        支持的语言:Python、JavaScript、C#、Java、 PHP、Lua;

        支持的工具:grep、sed、Notepad++、VSCode;

3. 减少代码量:

        进行复杂的字符串处理时,可能需要几十行代码,正则表达式几行就能搞定;

4. 灵活替换与批量处理:

        能批量替换符合模式的文本,无需逐个字符串对比;结合分组引用,可以保留和重用匹配部分;

5. 可读性与可维护性:

        具有高度的可读性和可维护性,避免重复造轮子。

二、适用场景:

场景示例
数据验证检查邮箱、手机号、身份证号码、IP地址、URL是否合法
数据提取从JSON、HTML、日志中找到特定字段
批量替换替换文本文件中的格式
日志分析解析nginx/apache日志提取访问IP、请求时间
爬虫分析对爬虫的数据进行分析
IDE/文本编辑器查找替换实现大量重复代码的查找和替换

正则特别合适的场景是有明确模式的文本处理,可以大量减少代码量,提高效率。

三、正则表达式具体内容

1.基础匹配

符号功能示例匹配内容
abc精确匹配cat仅匹配“cat”
.任意单个字符c.t"cat",“cut”,但不匹配"ct"
[]匹配方括号中任意一个字符[abc]“a”,“b”,“c”
[^]

匹配不在方括号内字符

[^0-9]非数字字符

2. 预定义字符类

符号功能
\d数字,等同[0-9]
\D非数字,等同[^0-9]
\w单词字符
\W非单词字符
\s空白字符(例如空格、制表、换行)
\S非空白字符

3. 量词

符号功能
*0次或者多次
+一次或者多次
?0次或1次
{n}恰好n次,例如a{3}->“aaa”
{n,}至少n次,例如a{2,}->"aa"/"aaa"
{n,m}n到m次,例如a{2,4}->"aa"/'aaa"/"aaaa"

4. 边界与位置

符号功能
^行首才匹配,例如^abc->"abc"
$行尾才匹配,例如abc$->"xyzabc"
\b

单词边界,例如\bcat\b->可以匹配 "The cat sat on the mat." 中的 "cat"

但不匹配 "category" 中的 "cat"。

\B非单词边界

5. 分组与引用

符号功能
(abc)

        分组,整体作为一个单元

例子:(go)+ 可以匹配 "go", "gogo", "gogogo" 等。

捕获例子:(\d{4})-(\d{2})-(\d{2}) 可以匹配日期 "2025-08-12",并分别捕获年份、月份和日期。

6. 转义字符与特殊字符

符号功能
\转义特殊字符,使其变为普通字符
|

用于在两个或多个模式中选择一个。

例子:cat|dog 匹配 "cat" 或 "dog"。

http://www.xdnf.cn/news/17736.html

相关文章:

  • Emscripten 指南:概念与使用
  • 科研人如何挖出SCI级创新选题?
  • [激光原理与应用-253]:理论 - 几何光学 - 变焦镜头的组成原理及图示解析
  • 《算法导论》第 21 章-用于不相交集合的数据结构
  • JavaWeb从入门到精通!第二天!(Servlet)
  • HTTPS服务
  • 小黑课堂计算机一级WPSOffice题库安装包1.44_Win中文_计算机一级考试_安装教程
  • 系统架构设计师备考之架构设计实践知识
  • Kafka跨机房双活方案中MM1与MM2
  • 新型Windows RPC攻击可劫持服务并完全攻陷Active Directory,PoC已公开
  • 开发npm包【详细教程】
  • 测试匠谈 | AI语音合成之大模型性能优化实践
  • 【c++】反向赋值:颠覆传统的数据交互范式
  • HeidiSQL 连接 MySQL 报错 10061
  • 工业相机终极指南:驱动现代智能制造的核心“慧眼”
  • mimiconda+vscode
  • 基恩士FSN10系列数字光纤传感器全新型光纤放大器 FSN11CP
  • 後端開發技術教學(五) 魔術方法、類、序列化
  • Day02——Docker
  • Avalonia实例实战六:控件的拖放
  • 前端面试:promise...then与asnyc ...await
  • 【算法训练营Day23】贪心算法part1
  • 前端工程化:pinia
  • 分享一款基于STC8H8K32U-45I-LQFP48单片机的4路数字量输入输出模块
  • 当AI重塑世界:普通人如何成为“主动进化者”?
  • 第16届蓝桥杯Python青少组_省赛_中/高级组_2025年5月真题
  • VirtualBox虚拟机网卡配置
  • LeetCode 2438.二的幂数组中查询范围内的乘积:模拟(前缀和可选)
  • Ansible 面试题 20250811
  • ansible学习第一天