C#教程

关注公众号 jb51net

关闭
首页 > 软件编程 > C#教程 > C#正则表达式使用

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

作者:生命不息-学无止境

正则表达式是一种匹配输入文本的模式,Net框架提供了允许这种匹配的正则表达式引擎,模式由一个或多个字符、运算符和结构组成,这篇文章主要介绍了C#正则表达式的详细使用说明,需要的朋友可以参考下

正则表达式基础概念

分类正则表达式字符描述示例
字符类.匹配除换行符之外的任意单个字符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#中使用正则表达式的基本步骤

using System.Text.RegularExpressions;
Regex phoneRegex = new Regex(@"^\d{7,8}$");
string phoneNumber = "1234567";
bool isMatch = phoneRegex.IsMatch(phoneNumber);
if (isMatch)
{
    Console.WriteLine("是有效的电话号码");
}
else
{
    Console.WriteLine("不是有效的电话号码");
}
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);
}
string numberText = "abc123def456";
Regex numberRegex = new Regex(@"\d+");
MatchCollection matches = numberRegex.Matches(numberText);
foreach (Match match in matches)
{
    Console.WriteLine(match.Value);
}

正则表达式的高级用法

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);
}
string assertText = "1abc 2def";
Regex assertRegex = new Regex(@"\d(? =abc)");
MatchCollection matches = assertRegex.Matches(assertText);
foreach (Match match in matches)
{
    Console.WriteLine(match.Value);
}
string replaceText = "abc123def";
string replaced = Regex.Replace(replaceText, @"\d", "#");
Console.WriteLine(replaced);

总结 

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

您可能感兴趣的文章:
阅读全文