C# 正则表达式使用指南:规则、常用模式与代码示例

小林子
小林子
发布时间:2026-10-16 | 6人浏览过
原创

本文详细介绍了 C# 中正则表达式的核心构成,包括字符转义、字符类、分组构造与限定符等基础规则。同时提供了一系列实用的常用正则表达式符号及其适用场景,如数字验证、邮箱格式检查及 IP 地址校验。此外,通过多个完整的 C# 控制台应用代码片段,演示了如何使用 System.Text.RegularExpressions.Regex 类进行 IsMatch 判断和 Replace 替换操作。

一、正则表达式基础结构

在 .NET 框架中,正则表达式引擎基于模式匹配输入文本。一个完整的模式由字符、运算符和结构组成。理解其基本构成是编写高效匹配规则的前提。

1. 字符转义

反斜杠 \ 用于指示特殊含义。若字符后跟随无法识别的转义序列,该字符将被原样匹配。

  • \a:匹配报警字符 \u0007。
  • \b(字符组内):匹配退格符 \u0008。
  • \t / \r / \v / \f:分别制表符、回车、垂直制表及换页符。
  • \n:匹配换行符 \u000A。
  • \dnnn / \xnn / \unnnn:分别使用八进制、十六进制或 Unicode 编码指定字符。
  • \cX:匹配控制字符,如 \cC 对应 Ctrl-C (\u0003)。

2. 字符类

字符类用于匹配特定集合中的单一字符。

  • [character_group]:匹配括号内的任一字符,区分大小写。
  • [^character_group]:匹配不在该组内的字符(取反)。
  • [first-last]:匹配指定范围内的任意字符,例如 [a-z]。
  • .:通配符,匹配除 \n 外的任意字符。若要匹配字面意义的句点需转义为 \.。
  • \w / \W:匹配单词字符(字母、数字、下划线)或非单词字符。
  • \s / \S:匹配空白字符(空格、制表符等)或非空白字符。
  • \d / \D:匹配十进制数字或非数字。

3. 分组构造

分组允许捕获子串并对子表达式进行操作。

  • (subexpression):标准捕获组,分配序号。
  • (?namesubexpression):命名捕获组。
  • (?:subexpression):非捕获组,不进行内存保存,仅用于逻辑分组。
  • (?=subexpression):正向先行断言(后面必须跟某模式)。
  • (?!subexpression):负向先行断言(后面不能跟某模式)。
  • (?<=subexpression):正向后行断言(前面必须跟某模式)。
  • (?>subexpression):非回溯子表达式(原子组),防止过度回溯提升性能。

4. 限定符

限定符指定前一个元素出现的次数。

  • *:0 次或多次。
  • +:1 次或多次。
  • ?:0 次或 1 次。
  • {n}:恰好 n 次。
  • {n,}:至少 n 次。
  • {n,m}:至少 n 次,至多 m 次。
  • 在上述每个限定符后加 ?(如 *?)可启用“最小化”(懒惰)匹配模式,优先匹配少次数。

二、C# 常用正则表达式符号速查

以下是开发中高频使用的预置模式,可直接应用于字符串校验:

用途正则模式
纯数字验证^[0-9]*$ 或 ^\d+$
N位数字^\d{n}$
正实数(2位小数)^[0-9]+(.[0-9]{2})?$
英文字母组成的字符串^[A-Za-z]+$
由数字、字母和下划线组成^\w+$
密码验证(6-18位,以字母开头)^[a-zA-Z]\w{5,17}$
包含特殊字符检测[^%&',;=?$\\"]+
中文字符验证^[\u4e00-\u9fa5]+$
Email 地址验证^(\w)+(\.\w+)*@(\w)+((\.\w{2,3}){1,3})$
Internet URL^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$
电话号码 (带或不带区号)^(\(\d{3,4}\)|\d{3,4}-)?\d{7,8}$
身份证号 (15或18位)^\d{15}|\d{18}|\d{17}X$
月份验证 (01-12)^(0?[1-9]|1[0-2])$
天数验证 (01-31)^((0?[1-9])|((1|2)[0-9])|30|31)$
IP 地址 (简单版)^([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$
HTML 标签匹配/<[^>]+>/g

三、代码实现与应用示例

以下示例展示了如何在 C# 程序中调用 System.Text.RegularExpressions 命名空间下的相关方法来实现具体的业务逻辑。

第1步:执行基本匹配 (IsMatch)

目的:验证用户输入的字符串是否包含指定的字符集合。

static void Main(string[] args)
{
    // 获取用户输入
    string str = Console.ReadLine();                
    // 定义正则:匹配 a, b 或 c
    string regex = @"[abc]";                          
    
    // 执行匹配并返回布尔值
    bool isMatch = Regex.IsMatch(str, regex);         
    
    // 输出结果
    Console.WriteLine(isMatch ? "Match [abc]" : "not Match [abc]");
    Console.WriteLine();
}

第2步:在字符串首尾插入内容 (Replace)

目的:利用锚点 ^ (开头) 和 $ (结尾) 修改字符串结构。

static void Main(string[] args)
{
    StringBuilder s = new StringBuilder("www.baidu.com", 50);
    string text = s.ToString();

    // 替换开头:在字符串起始位置添加文字
    string news = Regex.Replace(text, "^", "网址:"); 
    Console.WriteLine(news);                              

    // 替换结尾:在字符串末尾添加文字
    news = Regex.Replace(text, "$", "结尾"); 
    Console.WriteLine(news);
    Console.ReadLine();
}

第3步:全量字符类型检测

目的:判断整个输入是否全部由非单词字符(即除字母、数字、下划线以外的字符)构成。

static void Main(string[] args)
{
    string s = Console.ReadLine();           
    // ^\W*$:从头到尾全部是非单词字符
    string regex = @"^\W*$";                 
    bool isMatch = Regex.IsMatch(s, regex);  
    
    Console.WriteLine(isMatch ? "满足" : "不满足"); 
    Console.WriteLine();
}

第4步:排除法字符替换

目的:将除了特定字符(如 b, d, e)以外的所有字符统一替换为 “1”。

static void Main(string[] args)
{
    string s = "abcdef";
    // [^bde] 表示匹配不包含在 b, d, e 列表中的任意单字符
    string regex = @"[^bde]";                    
    
    string newReplace = Regex.Replace(s, regex, "1"); 
    
    Console.WriteLine(newReplace); // 输出: b1d1e1
    Console.WriteLine();
}

第5步:特定格式号码验证 (QQ号)

目的:严格校验长度为 5 到 11 位的纯数字输入。

static void Main(string[] args)
{
    string qq = Console.ReadLine();       
    string regex = @"^\d{5,11}$";         
    bool isqq = Regex.IsMatch(qq, regex); 
    
    Console.WriteLine(isqq ? "是QQ号" : "不是QQ号"); 
    Console.WriteLine();
}

第6步:IPv4 地址深度验证

目的:精确判断输入的字符串是否符合合法 IPv4 地址格式(0-255 每段)。此例使用循环保持监听直到进程结束。

static void Main(string[] args)
{
    // 复杂的分段正则,确保每段数值在 0~255 之间
    string regex = @"^((([1]?\d\d?|2[0-4]\d|25[0-5])\.){3}([1]?\d\d?|2[0-4]\d|25[0-5]))$";
    
    while (true)
    {
        string s = Console.ReadLine();                 
        if(string.IsNullOrEmpty(s)) break; // 空输入退出循环
        
        bool isMatch = Regex.IsMatch(s, regex);        
        Console.WriteLine(isMatch ? "是有效 IP 地址" : "不是有效 IP 地址"); 
    }
}
以上就是 C# 正则表达式详细内容的介绍,更多关于 C# 基础语法与字符串处理的资料请关注本站其它相关文章!
相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表