(33)C#正则表达式
正则表达式:专门用于字符串处理的语言,用来描述字符串特征的表达式
元字符
.
之间可以出现任意单个字符(除了\n 换行)
例如: a.b 意思是这个表达式必须是三个字符,第一个字符是a,第三个字符是b,中间是任意一个字符(中间字符也可以是空格)
[]
字符的筛选
例如: a[fgh]b 意思是这个表达式必须是三个字符,第一个字符是a,第三个字符是b,中间字符必须是f g h 中的一个字符
例如 a[0-9]b 第二个字符可以是 0到9之间的任意一个字符
例如 a[0-9a-zA-Z]b 第二个字符可以是 0到9或者a到z或者A-Z之间的任意一个字符
例如 a[^0-9a-z]b 第二个字符可以是除了0-9 a-z 以外的任意一个字符
|
表示或的意思
例如: z|food 意思是 这个表达式是z 或者 food (| 优先级最低)
例如:(z|f)ood 意思是 这个表达式是zood 或者 food
()
改变优先级,提取组
*
限定符,表示 * 前一个字符可以出现零次或者多次
例如: af*b 表示 f 可以不出现(ab)或者出现多次(afffffffb)
例如: a.*b 表示 ab间可以出现任何数字(asdgdffsgb)
+
限定符,表示 *号前一个字符至少出现一次
例如: a.+b 表示ab之间至少要出现一个字符(adfgsdfhsdfhb)
例如:a[0-9]b 表示 ab间至少有一个0-9的数字并且这个数字可以出现任意次(a0000b)
?
限定符,表示?前一个字符必须出现零次或者一次
例如: a.?b 这个字符串必须是ab 或者 a.b
?
另一个作用:终止贪婪模式。 正则表达式默认是贪婪模式
{}
两种
1、{n} 之前的一个字符必须出现n次
例如 a[0-9]{5}b ab间的存在5个相同字符并且这5个字符必须是0到9之前的一个数 (a88888b)
2、{n,m} 之前的一个字符最少出现n次,最多出现m次
例如 a[0-9]{5,7}b lue
3、{n,} 表示之前的一个字符至少出现n次,没有上限
^
必须是 xxx开头
例如 ^ab 表达式必须是ab开头 (ab454gag)
$
必须是 xxx结束
例如 xyz$ 表达式末尾必须是xyz(dhdfshxyz)
简写表达式
\d 等价于[0-9] 英文单词 digital(数字)
\D等价于[^0-9]
\s 表示所有不可见空白符 (包括中英文空格、回车、tab等)
例如: a\s*b 表示ab之间可以有任意空白或者只是ab两个字符
\S(大写) 表示除了\s(小写) 以外的所有字符
\w 匹配字母或数字或下划线或汉字 。 除了%&#@!$
\W
\b 单机的边界
@
如果一个字符串里出现带\的正则(如:\d)就需要在字符串前加个@,目的是让告诉.net编译器这个字符串里的\不是转义用的。
Regex 类
表示不可变的正则表达式。
using System.Text.RegularExpressions;
构造函数
Regex() 初始化 Regex 类的新实例
Regex(String) 新实例初始化 Regex 为指定的正则表达式类(传一个正则表达式进来)
还有三个暂时不用
方法
Regex.Match(string) 传一个字符串进去 (返回一个Match对象)
Regex.Match(string,string)第一个穿需要判断的字符串,第二个传正则表达式(返回一个Match对象)
Regex.IsMatch(string,string) 返回一个布尔值用来判断是否匹配成功
string p = "a.b"; string str="addb"; if (Regex.IsMatch(str, p)) { Console.WriteLine("匹配成功"); } else { Console.WriteLine("匹配不成功"); } Console.ReadKey(); }
Match 类
表示单个正则表达式匹配的结果
using System.Text.RegularExpressions;
属性
Length 获得字符串长度
string p = "a.b"; string str="adb"; Match match = Regex.Match(str, p); int a = match.Length; Console.WriteLine(a);
Success 判断是否匹配成功
string p = "a.b"; string str="addb"; Match match = Regex.Match(str, p); if (match.Success) { Console.WriteLine("匹配成功"); } else { Console.WriteLine("匹配不成功"); } Console.ReadKey();
Value 获得字符串的值
string p = "a.b"; string str="adb"; Match match = Regex.Match(str, p); string a = match.Value; Console.WriteLine(a);