详细介绍:【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"。

posted on 2025-08-13 13:35  ljbguanli  阅读(18)  评论(0)    收藏  举报