详情

首页手游攻略 C#中正则表达式的使用做法完整指南

C#中正则表达式的使用做法完整指南

佚名 2026-10-24 15:20:01

平时做技术实践时,很多问题不是概念不会,而是细节没串起来。拿“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, @"^1d{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")

结果:

True

2、d

数字

0~9

比如:

123

3、D

非数字

abc

4、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]")

结果:

True

11、[^]

取反

[^0-9]

不是数字。

12、|

或者

cat|dog

匹配

cat
dog

十、数量词

*

0 次或多次

ab*

能够匹配:

a
ab
abb
abbb

+

1 次或多次

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
10

Groups:

0
整个匹配
1
第一组
2
第二组

十二、常用验证

手机号

@"^1d{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 = @"
[email protected]
[email protected]
[email protected]";

MatchCollection mc = Regex.Matches(
    text,
    @"[w.-]+@[w.-]+.[A-Za-z]{2,}");

foreach (Match m in mc)
{
    Console.WriteLine(m.Value);
}

输出:

[email protected]
[email protected]
[email protected]

2. 隐藏手机号中间四位

string phone = "13812345678";

string result = Regex.Replace(
    phone,
    @"(d{3})d{4}(d{4})",
    "$1****$2");

Console.WriteLine(result);

输出:

138****5678

3. 删除所有 HTML 标签

string html = "<p>Hello <b>World</b></p>";

string text = Regex.Replace(html, "<.*?>", "");

Console.WriteLine(text);

输出:

Hello World

注意: 结合项目来看,对于复杂 HTML,不建议采用正则解析,应采用专门的 HTML 解析库(如 Html Agility Pack)。

十六、学习建议

建议按以下顺序掌握正则表达式:

  1. 基础语法:字符、字符集、数量词、锚点(^、$)。
  2. Regex 常用方法:IsMatch()、Match()、Matches()、Replace()、Split()。
  3. 进阶特性:分组、命名分组、反向引用、零宽断言(前瞻/后顾)、贪婪与懒惰匹配。
  4. 性能优化:预编译 Regex、避免灾难性回溯、设置超时时间(适用来处理不可信输入)。

总结

方法用途得到值
Regex.IsMatch()判断是否匹配bool
Regex.Match()拿到第一个匹配Match
Regex.Matches()拿到全部匹配MatchCollection
Regex.Replace()替换内容string
Regex.Split()按规则分割string[]
Regex.Escape()转义特殊字符string
Regex.Unescape()取消转义string

从实现思路看,熟练掌握正则表达式后,在 C# 中处理文本、日志、设置文件、表单验证、数据清洗和批量替换等场景都会更加高效

理解这一步时,总的来说,C#正则表达式采用方法适合结合实际项目边做边理解。先抓住核心思路,再逐步补上细节和边界处理,最后效果会更稳定,也更容易复用。

相关资讯
点击查看更多
游戏推荐
推荐专题
热门阅读
推荐下载