导读:本期聚焦于小伙伴创作的《C#如何使用Regex进行匹配 C#正则表达式匹配方法有哪些》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《C#如何使用Regex进行匹配 C#正则表达式匹配方法有哪些》有用,将其分享出去将是对创作者最好的鼓励。

在C#的开发场景中,处理文本校验、内容提取、格式匹配等需求时,正则表达式是非常高效的工具,而System.Text.RegularExpressions命名空间下的Regex类就是实现正则匹配的核心载体。开发者可以通过调用Regex类的不同方法,完成从简单到复杂的各类匹配操作。

C#如何使用Regex进行匹配 C#正则表达式匹配方法有哪些

Regex类的基础使用准备

在使用Regex进行匹配之前,首先需要引入对应的命名空间,否则无法直接调用Regex相关的类和方法。引入方式如下:

using System.Text.RegularExpressions;

Regex类的使用通常有两种方式,一种是直接调用Regex的静态方法,不需要手动创建实例;另一种是先创建Regex实例,再调用实例方法。如果同一个正则表达式需要多次使用,创建实例的方式可以减少正则编译的开销,性能更优。

常用的正则匹配方法

1. 判断字符串是否匹配正则:IsMatch方法

IsMatch方法用于判断输入的字符串是否符合指定的正则表达式规则,返回值为布尔类型,匹配成功返回true,否则返回false。这个方法适合做格式校验类的需求,比如校验手机号、邮箱格式是否合法。

下面是使用静态IsMatch方法校验手机号格式的示例:

using System;
using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {
        // 定义手机号正则,匹配1开头,第二位是3-9,后面9位任意数字的11位手机号
        string phonePattern = @"^1[3-9]d{9}$";
        string testPhone1 = "13812345678";
        string testPhone2 = "12812345678";
        
        bool isMatch1 = Regex.IsMatch(testPhone1, phonePattern);
        bool isMatch2 = Regex.IsMatch(testPhone2, phonePattern);
        
        Console.WriteLine($"测试手机号1是否匹配:{isMatch1}"); // 输出 True
        Console.WriteLine($"测试手机号2是否匹配:{isMatch2}"); // 输出 False
    }
}

如果需要多次校验同一个正则规则,也可以先创建Regex实例,再调用实例的IsMatch方法:

using System;
using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {
        string phonePattern = @"^1[3-9]d{9}$";
        Regex phoneRegex = new Regex(phonePattern);
        
        string testPhone = "15987654321";
        bool result = phoneRegex.IsMatch(testPhone);
        Console.WriteLine($"手机号校验结果:{result}"); // 输出 True
    }
}

2. 获取单个匹配结果:Match方法

当需要从字符串中提取第一个符合正则规则的内容时,可以使用Match方法。该方法返回Match类型的对象,Match对象的Success属性可以判断是否有匹配结果,Value属性可以获取匹配到的具体内容。

下面的示例从一段文本中提取第一个数字串:

using System;
using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {
        string text = "订单号是123456,金额是789元";
        // 匹配连续的数字
        string pattern = @"d+";
        Match match = Regex.Match(text, pattern);
        
        if (match.Success)
        {
            Console.WriteLine($"匹配到的第一个数字串:{match.Value}"); // 输出 123456
        }
        else
        {
            Console.WriteLine("未匹配到内容");
        }
    }
}

3. 获取所有匹配结果:Matches方法

如果字符串中存在多个符合正则规则的内容,需要全部提取出来,就可以使用Matches方法。该方法返回MatchCollection集合,遍历集合就可以拿到所有的匹配结果。

下面的示例提取文本中所有的数字串:

using System;
using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {
        string text = "订单号是123456,金额是789元,数量2件";
        string pattern = @"d+";
        MatchCollection matches = Regex.Matches(text, pattern);
        
        Console.WriteLine("所有匹配到的数字串:");
        foreach (Match match in matches)
        {
            Console.WriteLine(match.Value);
        }
        // 输出:
        // 123456
        // 789
        // 2
    }
}

正则匹配的高级用法

分组匹配

正则表达式中可以通过括号定义分组,匹配完成后可以通过分组获取对应部分的子内容。Match对象的Groups属性可以获取所有分组,索引0是整体匹配内容,索引1及以后是对应括号的分组内容。

下面的示例从邮箱地址中提取用户名和域名部分:

using System;
using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {
        string email = "testuser@ipipp.com";
        // 分组1匹配@前的用户名,分组2匹配@后的域名
        string pattern = @"^(w+)@(.+)$";
        Match match = Regex.Match(email, pattern);
        
        if (match.Success)
        {
            Console.WriteLine($"完整邮箱:{match.Groups[0].Value}");
            Console.WriteLine($"用户名:{match.Groups[1].Value}"); // 输出 testuser
            Console.WriteLine($"域名:{match.Groups[2].Value}"); // 输出 ipipp.com
        }
    }
}

匹配选项配置

创建Regex实例时,可以传入RegexOptions枚举来配置匹配规则,比如忽略大小写、多行模式、忽略空白等。常用的选项包括:

  • RegexOptions.IgnoreCase:匹配时不区分大小写
  • RegexOptions.Multiline:多行模式,^和$可以匹配每一行的开头和结尾
  • RegexOptions.IgnorePatternWhitespace:忽略正则中的空白字符,方便编写可读性更高的正则

下面的示例演示忽略大小写的匹配:

using System;
using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {
        string text = "Hello World";
        string pattern = @"hello world";
        // 不配置选项时,大小写不匹配
        bool result1 = Regex.IsMatch(text, pattern);
        // 配置忽略大小写选项
        bool result2 = Regex.IsMatch(text, pattern, RegexOptions.IgnoreCase);
        
        Console.WriteLine($"默认匹配结果:{result1}"); // 输出 False
        Console.WriteLine($"忽略大小写匹配结果:{result2}"); // 输出 True
    }
}

注意事项

在使用Regex进行匹配时,需要注意正则字符串的转义问题。C#中字符串如果前面不加@符号,反斜杠需要双写转义,比如匹配数字的正则应该写成"\d+",如果加了@符号,就可以直接写@"d+",减少转义带来的错误。

另外,如果正则表达式本身存在语法错误,创建Regex实例或者调用静态方法时会抛出ArgumentException,实际开发中可以根据需要添加异常处理逻辑,避免程序崩溃。

C#Regex正则表达式匹配Match方法MatchCollection修改时间:2026-06-24 10:54:37

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。