C#正则表达式的详细使用说明(附示例代码)

 更新时间:2025年07月21日 08:57:25   作者:生命不息-学无止境  
正则表达式是一种匹配输入文本的模式,Net框架提供了允许这种匹配的正则表达式引擎,模式由一个或多个字符、运算符和结构组成,这篇文章主要介绍了C#正则表达式的详细使用说明,需要的朋友可以参考下

正则表达式基础概念

  • 正则表达式是一种用于匹配文本模式的工具。它是由普通字符(例如字母、数字)和特殊字符(称为元字符)组成的字符串模式。在C#中,主要通过System.Text.RegularExpressions命名空间来使用正则表达式。
  • 元字符表格显示
分类正则表达式字符描述示例
字符类.匹配除换行符之外的任意单个字符a.b可匹配aabacb
[abc]匹配字符abc中的任意一个[abc]可匹配abc中的任意一个字符,如ab[abc]d可匹配abbdabcd
[0-9]匹配任意一个数字字符,等同于\d[0-9]可匹配0-9中的任意一个数字,如a1b中的1
[a-z]匹配任意一个小写字母字符[a-z]可匹配a-z中的任意一个小写字母,如a[abcdef]b可匹配abcabd
[^abc]匹配除abc之外的任意一个字符[^abc]可匹配除abc之外的任意字符,如a1b中的1a#b中的#
量词*匹配前面的元素零次或多次ab*可匹配aababb
+匹配前面的元素一次或多次ab+可匹配ababb等,但不能匹配a
?匹配前面的元素零次或一次ab?可匹配aab
{n}匹配前面的元素恰好na{3}可匹配aaa
{n,}匹配前面的元素至少na{2,}可匹配aaaaa
{n,m}匹配前面的元素至少n次且不超过ma{2,4}可匹配aaaaaaaaa
特殊字符\d匹配任意一个数字字符,等同于[0-9]\d可匹配0-9中的任意一个数字,如a1b中的1
\D匹配任意一个非数字字符,等同于[^0-9]\D可匹配除数字以外的任意字符,如a#b中的a#b
\w匹配任意一个字母、数字或下划线字符,等同于[a-zA-Z0-9_]\w可匹配a-zA-Z0-9_中的任意一个字符,如a1_b中的a1_
\W匹配任意一个非字母、数字或下划线字符,等同于[^a-zA-Z0-9_]\W可匹配除字母、数字、下划线以外的任意字符,如a#b中的#
\s匹配任意一个空白字符,包括空格、制表符、换页符等a\sb可匹配a b,其中中间有一个空格
\S匹配任意一个非空白字符a\Sb可匹配a#b等,其中#是非空白字符
\b匹配一个单词边界\bcat\b可匹配单独的单词cat,但不能匹配category中的cat
\B匹配一个非单词边界\Bcat\B可匹配category中的cat,但不能匹配单独的单词cat
定位符^匹配输入字符串的开始位置^abc可匹配以abc开头的字符串,如abcdef
$匹配输入字符串的结束位置def$可匹配以def结尾的字符串,如abcdef
转义字符\转义特殊字符,使特殊字符按字面意思匹配\.可匹配真正的句点字符.,而不是表示任意字符的.
分组与捕获(...)字符类,匹配括号内的任意一个字符,并将括号内的内容作为一个分组,可以通过Match.Groups获取分组内容(abc)可匹配abc中的任意一个字符,如a(abc)d可匹配aabdaacd等,通过分组可获取匹配到的具体字符
零宽断言(?=...)正向肯定预查,用于查找后面跟着特定模式的位置,但不消耗字符\d(?=abc)可匹配后面跟着abc的数字,如1abc中的1
(?!...)正向否定预查,用于查找后面不跟着特定模式的位置,但不消耗字符\d(?!abc)可匹配后面不跟着abc的数字,如1def中的1
(?<=...)反向肯定预查,用于查找前面跟着特定模式的位置,但不消耗字符(?<=def)\d可匹配前面跟着def的数字,如def1中的1
(?<!...)反向否定预查,用于查找前面不跟着特定模式的位置,但不消耗字符(?<!def)\d可匹配前面不跟着def的数字,如abc1中的1
常用方法IsMatch判断输入字符串是否与正则表达式匹配,返回boolRegex.IsMatch("abc123", @"\d")返回true
Match在输入字符串中查找第一个匹配项,返回Match对象,可通过Match.Value获取匹配的值,Match.Index获取匹配位置等Regex.Match("abc123", @"\d")可获取到第一个数字1的相关匹配信息
Matches在输入字符串中查找所有匹配项,返回MatchCollection集合,可遍历获取每个匹配项的信息Regex.Matches("abc123", @"\d")可获取到所有数字123的匹配信息
Replace将输入字符串中匹配正则表达式的部分替换为指定的字符串Regex.Replace("abc123", @"\d", "#")可将abc123替换为abc###
Split根据正则表达式将输入字符串分割成字符串数组Regex.Split("a1b2c3", @"\d")可将字符串分割为{"a", "b", "c"}

在C#中使用正则表达式的基本步骤

  • 引入命名空间:在C#代码中使用正则表达式,首先需要引入System.Text.RegularExpressions命名空间。例如:
using System.Text.RegularExpressions;
  • 创建正则表达式对象:使用Regex类来创建正则表达式对象。可以通过传递一个正则表达式模式字符串来创建。例如,要匹配一个简单的电话号码格式(假设电话号码是数字,长度为7 - 8位),可以这样创建:
Regex phoneRegex = new Regex(@"^\d{7,8}$");
  • 这里@符号是C#中的逐字字符串字面量,它告诉编译器这个字符串中的转义字符(如\)应该按照字面意思处理,而不是作为C#中的转义字符。^表示匹配字符串的开始,\d表示数字,{7,8}表示前面的元素(数字)出现7到8次,$表示匹配字符串的结束。
  • 进行匹配操作
    • 使用IsMatch方法判断是否匹配:例如,判断一个字符串是否是符合上述格式的电话号码。
string phoneNumber = "1234567";
bool isMatch = phoneRegex.IsMatch(phoneNumber);
if (isMatch)
{
    Console.WriteLine("是有效的电话号码");
}
else
{
    Console.WriteLine("不是有效的电话号码");
}
  • 使用Match和Matches方法获取匹配结果
    • Match方法返回第一个匹配项。例如,从一段文本中获取第一个符合电子邮件格式的字符串(简单示例)。
string text = "我的邮箱是test@example.com,还有一个无效邮箱abc";
Regex emailRegex = new Regex(@"[a - zA - Z0 - 9_.]+@[a - zA - Z0 - 9_.]+\.[a - zA - Z]+");
Match match = emailRegex.Match(text);
if (match.Success)
{
    Console.WriteLine("找到的邮箱是: " + match.Value);
}
  • Matches方法返回所有匹配项的集合。例如,从一段文本中获取所有的数字。
string numberText = "abc123def456";
Regex numberRegex = new Regex(@"\d+");
MatchCollection matches = numberRegex.Matches(numberText);
foreach (Match match in matches)
{
    Console.WriteLine(match.Value);
}

正则表达式的高级用法

  • 分组(Grouping):使用括号()可以将正则表达式的一部分进行分组。分组可以用于提取匹配的特定部分或者在匹配过程中应用量词到一组字符上。例如,在匹配日期格式(假设为yyyy - MM - dd)时,可以这样分组来提取年、月、日。
string dateText = "2024-05-10";
Regex dateRegex = new Regex(@"(\d{4})-(\d{2})-(\d{2})");
Match match = dateRegex.Match(dateText);
if (match.Success)
{
    Console.WriteLine("年: " + match.Groups[1].Value);
    Console.WriteLine("月: " + match.Groups[2].Value);
    Console.WriteLine("日: " + match.Groups[3].Value);
}
  • 零宽断言(Zero - width Assertions):这是一种特殊的匹配方式,它不消耗字符,只是在某个位置进行断言。例如,(? =...)是正向肯定预查,它用于查找后面跟着特定模式的位置。假设要找到后面跟着abc的数字,可以这样写:
string assertText = "1abc 2def";
Regex assertRegex = new Regex(@"\d(? =abc)");
MatchCollection matches = assertRegex.Matches(assertText);
foreach (Match match in matches)
{
    Console.WriteLine(match.Value);
}
  • 替换匹配的文本(Regex.Replace):可以使用Regex.Replace方法来替换匹配正则表达式的文本部分。例如,将一段文本中的所有数字替换为#
string replaceText = "abc123def";
string replaced = Regex.Replace(replaceText, @"\d", "#");
Console.WriteLine(replaced);

总结 

到此这篇关于C#正则表达式的详细使用说明的文章就介绍到这了,更多相关C#正则表达式使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C#减少垃圾回收压力的字符串操作详解

    C#减少垃圾回收压力的字符串操作详解

    这篇文章给大家详细分析了C#减少垃圾回收压力的字符串操作的相关知识点,有兴趣的朋友参考学习下吧。
    2018-03-03
  • Unity3d使用FairyGUI 自定义字体的操作

    Unity3d使用FairyGUI 自定义字体的操作

    由于本项目ui使用了第三方ui系统 fairyGUI 所以此文章主要讲述unity3d和fairygui搭配使用字体的过程
    2021-04-04
  • 如何使用C#中的Lazy的使用方法

    如何使用C#中的Lazy的使用方法

    这篇文章主要介绍了如何使用C#中的Lazy的使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • C#实现日历效果

    C#实现日历效果

    这篇文章主要为大家详细介绍了C#实现日历效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • 详解c#中Array,ArrayList与List<T>的区别、共性与相互转换

    详解c#中Array,ArrayList与List<T>的区别、共性与相互转换

    本文详细讲解了c#中Array,ArrayList与List<T>的区别、共性与相互转换,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • C#中String类常用方法汇总

    C#中String类常用方法汇总

    这篇文章主要介绍了C#中String类常用方法,较为详细的汇总了String类中的常用方法,对于深入掌握C#字符串操作有着很好的学习借鉴价值,需要的朋友可以参考下
    2014-11-11
  • WPF实现绘制扇形统计图的示例代码

    WPF实现绘制扇形统计图的示例代码

    这篇文章主要介绍了如何利用WPF绘制扇形统计图,文中的示例代码讲解详细,对我们学习或工作有一定帮助,感兴趣的小伙伴可以了解一下
    2022-09-09
  • 详解如何使用BenchmarkDotNet对.NET代码进行性能基准测试

    详解如何使用BenchmarkDotNet对.NET代码进行性能基准测试

    BenchmarkDotNet是一个基于.NET开源、功能全面、易于使用的性能基准测试框架,这篇文章就来和小编一起学习一下如何使用BenchmarkDotNet对.NET代码进行性能基准测试吧
    2024-12-12
  • Unity控制指针旋转到指定位置

    Unity控制指针旋转到指定位置

    这篇文章主要为大家详细介绍了Unity控制指针旋转到指定位置,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-02-02
  • C#之Socket客户端全过程

    C#之Socket客户端全过程

    这篇文章主要介绍了C#之Socket客户端全过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05

最新评论