C# 正则表达式Regex专题
1、正则表达式中的元字符
编号 | 字符 | 描述 |
1 | . | 匹配除换行符以外的所有字符 |
2 | \w | 匹配字母、数字、下画线 |
3 | \s | 匹配空白符(空格) |
4 | \d | 匹配数字 |
5 | \b | 匹配表达式的开始或结束 |
6 | ^ | 匹配表达式的开始 |
7 | $ | 匹配表达式的结束 |
2、正则表达式中表示重复的字符
编 号 | 字 符 | 描 述 |
1 | * | 0次或多次字符 |
2 | ? | 0次或1次字符 |
3 | + | 1次或多次字符 |
4 | {n} | n次字符 |
5 | {n,M} | n到M次字符 |
6 | {n, } | n次以上字符 |
符号模式
字 符 |
描 述 |
(pattern) |
匹配pattern并获取这一匹配 |
(?:pattern) |
匹配pattern但不获取匹配结果 |
(?=pattern) |
正向预查,在任何匹配pattern的字符串开始处匹配查找字符串 |
(?!pattern) |
负向预查,在任何不匹配pattern的字符串开始处匹配查找字符串 |
x|y |
匹配x或y。例如,‘z|food’能匹配“z”或“food”。‘(z|f)ood’则匹配“zood”或“food” |
[xyz] |
字符集合。匹配所包含的任意一个字符。例如,‘[abc]’可以匹配“plain”中的‘a’ |
[^xyz] |
负值字符集合。匹配未包含的任意字符。例如,‘[^abc]’可以匹配“plain”中的‘p’ |
[a-z] |
匹配指定范围内的任意字符。例如,‘[a-z]’可以匹配'a'到'z'范围内的任意小写字母字符 |
[^a-z] |
匹配不在指定范围内的任意字符。例如,‘[^a-z]’可以匹配不在‘a’~‘z’'内的任意字符 |
\b |
匹配一个单词边界,指单词和空格间的位置 |
\B |
匹配非单词边界 |
\d |
匹配一个数字字符,等价于[0-9] |
\D |
匹配一个非数字字符,等价于[^0-9] |
\f |
匹配一个换页符 |
\n |
匹配一个换行符 |
\r |
匹配一个回车符 |
\s |
匹配任何空白字符,包括空格、制表符、换页符等 |
\S |
匹配任何非空白字符 |
\t | 匹配一个制表符 |
\v | 匹配一个垂直制表符。等价于\x0b和\cK |
\w | 匹配包括下划线的任何单词字符。等价于‘'[A-Za-z0-9_]’ |
\W | 匹配任何非单词字符。等价于‘[^A-Za-z0-9_]’ |
3、正则表达式所属类
Regex 类,该类在 System.Text.RegularExpressions 名称空间中
4、使用|
分隔符表示多个正则表达式之间的或者关系
也就是在匹配某一个字符串时满足其中一个正则表达式即可
例如使用正则表达式来验证身份证信息,第一代身份证是由 15 个数字构成的,第二代身份证是由 18 个数字构成的,正则表达式可以写成 \d{15}|\d{18}
5、正则表达式使用
字符 | 描述 |
---|---|
\ | 转义字符,将一个具有特殊功能的字符转义为一个普通字符,或反过来 |
(pattern) | 匹配 pattern 并获取这一匹配 |
(?:pattern) | 匹配 pattern 但不获取匹配结果 |
(?=pattern) | 正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串 |
(?!pattern) | 负向预查,在任何不匹配 pattern 的字符串开始处匹配查找字符串 |
x|y | 匹配x或y。例如,‘z|food’能匹配“z”或“food”。‘(z|f)ood’则匹配“zood”或“food” |
[xyz] | 字符集合。匹配所包含的任意一个字符。例如,‘[abc]’可以匹配“plain”中的‘a’ |
[^xyz] | 负值字符集合。匹配未包含的任意字符。例如,‘[^abc]’可以匹配“plain”中的‘p’ |
[a-z] | 匹配指定范围内的任意字符。例如,‘[a-z]’可以匹配'a'到'z'范围内的任意小写字母字符 |
[^a-z] | 匹配不在指定范围内的任意字符。例如,‘[^a-z]’可以匹配不在‘a’~‘z’'内的任意字符 |
\B | 匹配非单词边界 |
\D | 匹配一个非数字字符,等价于 [^0-9] |
\f | 匹配一个换页符 |
\n | 匹配一个换行符 |
\r | 匹配一个回车符 |
\S | 匹配任何非空白字符 |
\t | 匹配一个制表符 |
\v | 匹配一个垂直制表符。等价于 \x0b 和 \cK |
\W | 匹配任何非单词字符。等价于‘[^A-Za-z0-9_]’ |
6、常用正则表达式
编号 | 正则表达式 | 作用 |
---|---|---|
1 | \d{15}|\d{18} | 验证身份证号码(15位或18位) |
2 | \d{3}-\d{8}|\d{4}-\d{7} | 验证国内的固定电话(区号有3位或4位,并在区号和电话号码之 间加上-) |
3 | ^[1-9]\d*$ | 验证字符串中都是正整数 |
4 | ^-[1-9]\d*$ | 验证字符串中都是负整数 |
5 | ^-?[1-9]\d*$ | 验证字符串中是整数 |
6 | ^[A-Za-z]+$ | 验证字符串中全是字母 |
7 | A[A-Za-z0-9]+$ | 验证字符串由数字和字母构成 |
8 | [\u4e00-\u9fa5] | 匹配字符串中的中文 |
9 | [^\x00-\xff] | 匹配字符串中的双字节字符(包括汉字) |
定义一个Regex类的实例
Regex regex = new Regex(@"\d"); 这里的初始化参数就是一个正则表达式,“\d”表示配置数字
判断是否匹配
判断一个字符串,是否匹配一个正则表达式,在Regex对象中,可以使用Regex.IsMatch(string)方法。 regex.IsMatch("abc"); //返回值为false,字符串中未包含数字 regex.IsMatch("abc3abc"); //返回值为true,因为字符串中包含了数字
获取匹配次数
使用Regex.Matches(string)方法得到一个Matches集合,再使用这个集合的Count属性。 regex.Matches("abc123abc").Count; 返回值为3,因为匹配了三次数字。
获取匹配的内容
使用Regex.Match(string)方法进行匹配。 regex.Match("abc123abc").Value; 返回值为1,表示第一个匹配到的值。
捕获
正则表达式中可以使用括号对部分值进行捕获,要想获取捕获的值,可以使用Regex.Match(string).Groups[int].Value来获取。 Regex regex = new Regex(@"\w(\d*)\w"); //匹配两个字母间的数字串 regex.Match("abc123abc").Groups[0].Value; //返回值为“123”。
Replace
C#执行一次替换,可以使用这则表达式来实现,正则的Replace有6中重载版本,可以指定替换次数 Regex构造函数 Regex(string pattern) Regex(string pattern,RegexOptions options) 参数说明 pattern:要匹配的正则表达式模式 options:指定是否要编译,忽略大小写等等 Regex.Replace方法 -C# Regex.Replace(string input,string replacement) Regex.Replace(string input,string replacement,int count) Regex.Replace(string input,string replacement,int count,int startat) Regex.Replace(string input,MatchEvaluator evaluator) Regex.Replace(string input,MatchEvaluator evaluator,int count) Regex.Replace(string input,MatchEvaluator evaluator,int count,int startat) 参数说明 input:要修改的字符串 replacement:替换字符串 count:进行替换的最大次数 startat:输入字符串开始搜索的位置 evaluator:在每一步计算替换的MatchEvaluator。就是一个函数代理,参数为Match类型,匹配的数据。
将字符串"aaa"中的"a"替换为"b",只替换1次
string s = "aaa"; Regex r = new Regex("a"); s=r.Replace(s,"b",1); Response.Write(s);//输出baa
将字符串指定字符串替换为空,只替换1次
Regex regex = new Regex("[#,$,&,*,@,^,%,~]"); innerVar_list = dt_Template_Var_Info.AsEnumerable().Select(d => d.Field<string>("variable")).ToList(); foreach (string variable in innerVar_list) { string var = regex.Replace(variable, "", 1); rs_list.Columns.Add(var); rs_ihg.Columns.Add(var); }
对于字符串:"AAAA AAA BBBB BBB BBB CCCCCCCC",分隔为 “AAAA AAA” , "BBBB BBB BBB","CCCCCCCC"
var str = "AAAA AAA BBBB BBB BBB CCCCCCCC"; // - split by multiple spaces(more than one) var val = System.Text.RegularExpressions.Regex.Split( str, @"\s{2,}"); System.Console.WriteLine(val); // - split by spaces(one or more) var val2 = System.Text.RegularExpressions.Regex.Split( str, @"\s{1,}"); System.Console.WriteLine(val2);
--
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)