【C#】正则表达式

发布于:2025-08-13 ⋅ 阅读:(13) ⋅ 点赞:(0)

一、核心优势

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


使用正则表达式的好处:

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"。