C# 正则表达式(Regex类)

正则表达式是由普通字符(如英文字母)以及特殊字符(也称为元字符)组成的一种文字模式

这种文字模式可用于检查字符串的值是否满足一定的规则,例如:

  • 验证输入的邮箱是否合法

  • 输入的身份证号码是否合法

  • 输入的用户名是否满足条件等

也可以进行字符串的替换和提取

所以,正则表达式可以是单个字符,也可以是更复杂的模式

Regex类

C# 正则表达式 Regex 类,包含于 System.Text.RegularExpressions 命名空间下,常用的方法如下:

方法

描述

public bool IsMatch( string input )

指示 Regex 构造函数中指定的正则表达式,是否在指定的输入字符串中找到匹配项。

public bool IsMatch( string input, int startat )

指示 Regex 构造函数中指定的正则表达式,

是否在指定的输入字符串中找到匹配项,从字符串中指定的开始位置开始。

public static bool IsMatch( string input, string pattern )

指示指定的正则表达式,是否在指定的输入字符串中找到匹配项。

public MatchCollection Matches( string input )

在指定的输入字符串中,搜索正则表达式的所有匹配项。

public string Replace( string input, string replacement )

在指定的输入字符串中,

把所有匹配正则表达式模式的所有匹配的字符串,替换为指定的替换字符串。

public string[] Split( string input )

把输入字符串分割为子字符串数组,

根据在 Regex 构造函数中,指定的正则表达式模式定义的位置进行分割。

Regex 类中还提供了很多方法来操作正则表达式:

字符描述
\ 转义字符,将一个具有特殊功能的字符转义为一个普通字符,或反过来
(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_]’

正则表达式的符号

正则表达式中的元字符:

字符描述
. 匹配除换行符以外的所有字符
\w 匹配字母、数字、下画线
\s 匹配空白符(空格)
\d 匹配数字
\b 匹配表达式的开始或结束
^ 匹配表达式的开始
$ 匹配表达式的结束

正则表达式中表示重复的字符:

字 符描 述
* 0次或多次字符
? 0次或1次字符
+ 1次或多次字符
{n} n次字符
{n,M}  n到M次字符
{n, } n次以上字符

Regex类的实例

字符串替换:

1     string strInfo = "YEAR=2021年;MONTH=10月;DAY=01日";
2     Console.WriteLine("日期:"+strInfo);
3     Console.WriteLine("将日期中的MONTH修改为1月:");
4     Regex reg = new Regex("MONTH=(.+);");
5     string strAfter = reg.Replace(strInfo, "MONTH=01月;");
6     Console.WriteLine("修改后的日期为:\n" + strAfter);

字符串匹配:

1     string strInfo = "YEAR=2021年;MONTH=10月;DAY=01日";
2     Console.WriteLine("日期:" + strInfo);
3     Console.WriteLine("提取日期字符串中的月份:");
4     Regex reg = new Regex("MONTH=(.+);");
5     Match match = reg.Match(strInfo);
6     string strAfter = match.Groups[1].Value;
7     Console.WriteLine("日期的月份为:" + strAfter);

Match实例:

1     string strInfo = "Road=9527;Speed=56.7km/h;Acceleration=5.25mph/s";
2     Console.WriteLine("道路情况:" + strInfo);
3     Console.WriteLine("提取道路情况中的速度情况:");
4     Regex reg = new Regex(@"Speed\s*=\s*([\d\.]+)\s*(mph|km/h|m/s)*");
5     Match match = reg.Match(strInfo);
6     string strAfter1 = match.Groups[1].Value;
7     string strAfter2 = match.Groups[2].Value;
8     Console.WriteLine("速度值为:{0} 速度单位为:{1}", strAfter1, strAfter2);

解码GPS的GPRMC字符串:

1     // 获取字符串中的经度、纬度值
2     Regex reg = new Regex(@"^\$GPRMC,[\d\.]*,[A|V],(-?[0-9]*\.?[0-9]+),([NS]*),(-?[0-9]*\.?[0-9]+),([EW]*),.*");

提取 [ ] 中的值:

1     string strInfo = "abcd[9527]dcba";
2     Console.WriteLine("字符串:" + strInfo);
3     Console.WriteLine("提取字符串[]中的值:");
4     string pattern = @"(?is)(?<=\[)(.*)(?=\])";
5     string strAfter = new Regex(pattern).Match(strInfo).Value;
6     Console.WriteLine("字符串[]中的值为:" + strAfter);

提取 ( ) 中的值:

1    string strInfo = "abcd(9527)dcba";
2    Console.WriteLine("字符串:" + strInfo);
3    Console.WriteLine("提取字符串()中的值:");
4    string pattern = @"(?is)(?<=\()(.*)(?=\))";
5    string strAfter = new Regex(pattern).Match(strInfo).Value;
6    Console.WriteLine("字符串()中的值为:" + strAfter);

提取 { } 中的值:

1    string strInfo = "abcd{9527}dcba";
2    Console.WriteLine("字符串:" + strInfo);
3    Console.WriteLine("提取字符串{}中的值:");
4    string pattern = @"(?is)(?<=\{)(.*)(?=\})";
5    string strAfter = new Regex(pattern).Match(strInfo).Value;
6    Console.WriteLine("字符串{}中的值为:" + strAfter);

常用的正则表达式

校验数字的表达式:

 1   // 验证数字
 2   Regex reg = new Regex(@"^[0-9]*$");
 3   // 验证n位的数字
 4   Regex reg = new Regex(@"^\d{n}$");
 5   // 验证至少n位的数字
 6   Regex reg = new Regex(@"^\d{n,}$");
 7   // 验证m-n位的数字
 8   Regex reg = new Regex(@"^\d{m,n}$");
 9   // 验证零和非零开头的数字
10   Regex reg = new Regex(@"^(0|[1-9][0-9]*)$");
11   // 验证非零开头的最多带两位小数的数字
12   Regex reg = new Regex(@"^([1-9][0-9]*)+(.[0-9]{1,2})?$");
13   // 验证带1-2位小数的正数或负数
14   Regex reg = new Regex(@"^(\-)?\d+(\.\d{1,2})?$");
15   // 验证正数、负数、和小数
16   Regex reg = new Regex(@"^(\-|\+)?\d+(\.\d+)?$");
17   // 验证有两位小数的正实数
18   Regex reg = new Regex(@"^[0-9]+(.[0-9]{2})?$");
19   // 验证有1~3位小数的正实数
20   Regex reg = new Regex(@"^[0-9]+(.[0-9]{1,3})?$");
21   // 验证非零的正整数
22   Regex reg = new Regex(@"^[1-9]\d*$");
23   Regex reg = new Regex(@"^([1-9][0-9]*){1,3}$");
24   Regex reg = new Regex(@"^\+?[1-9][0-9]*$");
25   // 验证非零的负整数
26   Regex reg = new Regex(@"^\-[1-9][0-9]*$");
27   Regex reg = new Regex(@"^-[1-9]\d*$");
28   // 验证非负整数
29   Regex reg = new Regex(@"^\d+$");
30   Regex reg = new Regex(@"^[1-9]\d*|0$");
31   // 验证非正整数
32   Regex reg = new Regex(@"^-[1-9]\d*|0$");
33   Regex reg = new Regex(@"^((-\d+)|(0+))$");
34   // 验证非负浮点数
35   Regex reg = new Regex(@"^\d+(\.\d+)?$");
36   Regex reg = new Regex(@"^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$");
37   // 验证非正浮点数
38   Regex reg = new Regex(@"^((-\d+(\.\d+)?)|(0+(\.0+)?))$");
39   Regex reg = new Regex(@"^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$");
40   // 验证正浮点数
41   Regex reg = new Regex(@"^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$");
42   Regex reg = new Regex(@"^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$");
43   // 验证负浮点数
44   Regex reg = new Regex(@"^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$");
45   Regex reg = new Regex(@"^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$");
46   // 验证浮点数
47   Regex reg = new Regex(@"^(-?\d+)(\.\d+)?$");
48   Regex reg = new Regex(@"^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$");

校验字符的表达式:

 1   // 验证汉字
 2   Regex reg = new Regex(@"^[\u4e00-\u9fa5]{0,}$");
 3   // 验证英文和数字
 4   Regex reg = new Regex(@"^[A-Za-z0-9]+$");
 5   Regex reg = new Regex(@"^[A-Za-z0-9]{4,40}$");
 6   // 验证长度为3-20的所有字符
 7   Regex reg = new Regex(@"^.{3,20}$");
 8   // 验证由26个英文字母组成的字符串
 9   Regex reg = new Regex(@"^[A-Za-z]+$");
10   // 验证由26个大写英文字母组成的字符串
11   Regex reg = new Regex(@"^[A-Z]+$");
12   // 验证由26个小写英文字母组成的字符串
13   Regex reg = new Regex(@"^[a-z]+$");
14   // 验证由数字和26个英文字母组成的字符串
15   Regex reg = new Regex(@"^[A-Za-z0-9]+$");
16   // 验证由数字、26个英文字母或者下划线组成的字符串
17   Regex reg = new Regex(@"^\w+$");
18   Regex reg = new Regex(@"^\w{3,20}$");
19   // 验证中文、英文、数字包括下划线
20   Regex reg = new Regex(@"^[\u4E00-\u9FA5A-Za-z0-9_]+$");
21   // 验证中文、英文、数字但不包括下划线等符号
22   Regex reg = new Regex(@"^[\u4E00-\u9FA5A-Za-z0-9]+$");
23   Regex reg = new Regex(@"^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$");
24   // 验证可以输入含有^%&’,;=?$\”等字符
25   Regex reg = new Regex(@"[^%&’,;=?$\x22]+");
26   // 验证禁止输入含有~的字符
27   Regex reg = new Regex(@"[^~\x22]+"); 

特殊需求的表达式:

 1   // 验证Email地址
 2   Regex reg = new Regex(@"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$");
 3   // 验证域名
 4   Regex reg = new Regex(@"[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?");
 5   // 验证InternetURL
 6   Regex reg = new Regex(@"[a-zA-z]+://[^\s]*");
 7   Regex reg = new Regex(@"^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$");
 8   // 验证手机号码
 9   Regex reg = new Regex(@"^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$");
10   // 验证电话号码(XXX-XXXXXXX、XXXX-XXXXXXXX、XXX-XXXXXXX、XXX-XXXXXXXX、XXXXXXX 和 XXXXXXXX)
11   Regex reg = new Regex(@"^($$\d{3,4}-)|\d{3.4}-)?\d{7,8}$");
12   // 验证国内电话号码
13   Regex reg = new Regex(@"\d{3}-\d{8}|\d{4}-\d{7}");
14   // 验证身份证号(15位、18位数字)
15   Regex reg = new Regex(@"^\d{15}|\d{18}$");
16   // 验证短身份证号码(数字、字母x结尾)
17   Regex reg = new Regex(@"^([0-9]){7,18}(x|X)?$");
18   Regex reg = new Regex(@"^\d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$");
19   // 验证帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线)
20   Regex reg = new Regex(@"^[a-zA-Z][a-zA-Z0-9_]{4,15}$");
21   // 验证密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线)
22   Regex reg = new Regex(@"^[a-zA-Z]\w{5,17}$");
23   // 验证强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间)
24   Regex reg = new Regex(@"^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$");
25   // 验证日期格式
26   Regex reg = new Regex(@"^\d{4}-\d{1,2}-\d{1,2}");
27   // 验证一年的12个月
28   Regex reg = new Regex(@"^(0?[1-9]|1[0-2])$");
29   // 验证一个月的31天
30   Regex reg = new Regex(@"^((0?[1-9])|((1|2)[0-9])|30|31)$");
31   // 验证钱的输入格式:"10000.00" 和 "10,000.00", 和没有 “分” 的 "10000" 和 "10,000"
32   Regex reg = new Regex(@"^[1-9][0-9]*$");
33   // 验证任意一个不以0开头的数字
34   Regex reg = new Regex(@"^(0|[1-9][0-9]*)$");
35   // 验证一个0或者一个不以0开头的数字.我们还可以允许开头有一个负号
36   Regex reg = new Regex(@"^(0|-?[1-9][0-9]*)$");
37   // 验证一个0或者一个可能为负的开头不为0的数字
38   Regex reg = new Regex(@"^[0-9]+(.[0-9]+)?$");
39   // 验证小数点后面至少应该有1位数
40   Regex reg = new Regex(@"^[0-9]+(.[0-9]{2})?$");
41   // 验证小数点后面必须有两位
42   Regex reg = new Regex(@"^[0-9]+(.[0-9]{1,2})?$");
43   // 验证允许用户只写一位小数
44   Regex reg = new Regex(@"^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$");
45   // 验证1到3个数字,后面跟着任意个 逗号+3个数字,逗号成为可选,而不是必须
46   Regex reg = new Regex(@"^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$");
47   // 验证xml文件
48   Regex reg = new Regex(@"^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$");
49   // 验证中文字符的正则表达式
50   Regex reg = new Regex(@"[\u4e00-\u9fa5]");
51   // 验证双字节字符
52   Regex reg = new Regex(@"[^\x00-\xff] (包括汉字在内,可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1))");
53   // 验证空白行的正则表达式,可用来删除空白行
54   Regex reg = new Regex(@"\n\s*\r");
55   // 验证HTML标记的正则表达式
56   Regex reg = new Regex(@"<(\S*?)[^>]*>.*?</\1>|<.*? />");
57   // 验证首尾空白字符的正则表达式
58   Regex reg = new Regex(@"^\s*|\s*$或(^\s*)|(\s*$)");
59   // 验证腾讯QQ号(腾讯QQ号从10000开始)
60   Regex reg = new Regex(@"[1-9][0-9]{4,}");
61   // 验证中国邮政编码(中国邮政编码为6位数字)
62   Regex reg = new Regex(@"[1-9]\d{5}(?!\d)");
63   // 验证IP地址
64   Regex reg = new Regex(@"\d+\.\d+\.\d+\.\d+");
65   // 验证IP地址
66   Regex reg = new Regex(@"((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))");

 

 

 

 

 

*** |  以上内容仅为学习参考、学习笔记使用  | ***

 
posted @ 2021-11-08 18:52  Mr.Cat~  阅读(3744)  评论(0编辑  收藏  举报