目录正则表达式基础概念在C#中使用正则表达式的基本步骤正则表达式的高级用法总结正则表达式基础概念正则表达式是一种用于匹配文本模式的工具。它是由普通字符(例如字母、数字)和特殊字符(称为元字符)组成的字符串模式。在C#中,主要通过System.Text.RegularExpressions命名空间来使用正则表达式。
元字符表格显示:分类正则表达式字符描述示例字符类.匹配除换行符之外的任意单个字符a.b可匹配aab、acb等[abc]匹配字符a、b或c中的任意一个[abc]可匹配a、b、c中的任意一个字符,如ab[abc]d可匹配abbd、abcd等[0-9]匹配任意一个数字字符,等同于\d[0-9]可匹配0-9中的任意一个数字,如a1b中的1[a-z]匹配任意一个小写字母字符[a-z]可匹配a-z中的任意一个小写字母,如a[abcdef]b可匹配abc、abd等[^abc]匹配除a、b、c之外的任意一个字符[^abc]可匹配除a、b、c之外的任意字符,如a1b中的1,a#b中的#量词*匹配前面的元素零次或多次ab*可匹配a、ab、abb等+匹配前面的元素一次或多次ab+可匹配ab、abb等,但不能匹配a?匹配前面的元素零次或一次ab?可匹配a或ab{n}匹配前面的元素恰好n次a{3}可匹配aaa{n,}匹配前面的元素至少n次a{2,}可匹配aa、aaa等{n,m}匹配前面的元素至少n次且不超过m次a{2,4}可匹配aa、aaa、aaaa特殊字符\d匹配任意一个数字字符,等同于[0-9]\d可匹配0-9中的任意一个数字,如a1b中的1\D匹配任意一个非数字字符,等同于[^0-9]\D可匹配除数字以外的任意字符,如a#b中的a、#、b\w匹配任意一个字母、数字或下划线字符,等同于[a-zA-Z0-9_]\w可匹配a-z、A-Z、0-9、_中的任意一个字符,如a1_b中的a、1、_\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)可匹配a、b或c中的任意一个字符,如a(abc)d可匹配aabd、aacd等,通过分组可获取匹配到的具体字符零宽断言(?=...)正向肯定预查,用于查找后面跟着特定模式的位置,但不消耗字符\d(?=abc)可匹配后面跟着abc的数字,如1abc中的1(?!...)正向否定预查,用于查找后面不跟着特定模式的位置,但不消耗字符\d(?!abc)可匹配后面不跟着abc的数字,如1def中的1(?<=...)反向肯定预查,用于查找前面跟着特定模式的位置,但不消耗字符(?<=def)\d可匹配前面跟着def的数字,如def1中的1(?反向否定预查,用于查找前面不跟着特定模式的位置,但不消耗字符(?可匹配前面不跟着def的数字,如abc1中的1常用方法IsMatch判断输入字符串是否与正则表达式匹配,返回bool值Regex.IsMatch("abc123", @"\d")返回trueMatch在输入字符串中查找第一个匹配项,返回Match对象,可通过Match.Value获取匹配的值,Match.Index获取匹配位置等Regex.Match("abc123", @"\d")可获取到第一个数字1的相关匹配信息Matches在输入字符串中查找所有匹配项,返回MatchCollection集合,可遍历获取每个匹配项的信息Regex.Matches("abc123", @"\d")可获取到所有数字1、2、3的匹配信息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#正则表达式大全C#使用正则表达式实例c#字符串使用正则表达式示例C#中常用的正则表达式C#中常用的正则表达式实例
