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#如何连接数据库问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • C# WinFrom中show和ShowDialog的区别详解

    C# WinFrom中show和ShowDialog的区别详解

    想了解 C# WinForm 里Show()和ShowDialog()的核心区别,这两个方法都是用来显示窗体的,最关键的差异是是否为「模态窗体」,下面用通俗解释 + 表格对比 + 实际代码示例讲清楚,新手也能直接套用,需要的朋友可以参考下
    2026-02-02
  • 详解C#如何控制多线程同步执行

    详解C#如何控制多线程同步执行

    使用Task类来控制多线程的同步执行,可应用于多任务分发执行后,这篇文章主要为大家详细介绍了C#如何通过Task类控制多线程同步执行,感兴趣的小伙伴可以了解下
    2023-12-12
  • C#中将dateTimePicker初始值设置为空

    C#中将dateTimePicker初始值设置为空

    本文主要介绍了C#中将dateTimePicker初始值设置为空,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • 适合初学者开发的C#在线英汉词典小程序

    适合初学者开发的C#在线英汉词典小程序

    这篇文章主要为大家详细介绍了适合初学者开发的C#在线英汉词典小程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • 几分钟搞懂c#之FileStream对象读写大文件(推荐)

    几分钟搞懂c#之FileStream对象读写大文件(推荐)

    这篇文章主要介绍了c#之FileStream对象读写大文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • C#集合之列表的用法

    C#集合之列表的用法

    这篇文章介绍了C#集合之列表的用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • C#基于QRCode实现动态生成自定义二维码图片功能示例

    C#基于QRCode实现动态生成自定义二维码图片功能示例

    这篇文章主要介绍了C#基于QRCode实现动态生成自定义二维码图片功能,结合实例形式分析了C#使用QRCode动态生成二维码图片相关操作技巧,需要的朋友可以参考下
    2019-02-02
  • Unity 使用TexturePacker打包图集的操作方法

    Unity 使用TexturePacker打包图集的操作方法

    这篇文章主要介绍了Unity 使用TexturePacker打包图集的操作方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • C#获取Windows10屏幕缩放比例的操作方法

    C#获取Windows10屏幕缩放比例的操作方法

    这篇文章主要介绍了C#获取Windows10屏幕的缩放比例,接下来介绍如何获取Display resolution中显示的实际分辨率,本文通过示例代码给大家介绍的非常详细,需要的朋友可以参考下
    2021-12-12

最新评论