数往知来C#之 正则表达式 委托 XML六
标签:
C# 正则表达式篇一、正则表达式
正则表达式就是一个字符串,不要想着一下子可以写出一个通用的表达式,先写,不正确再改
写正则表达式就是在找规律
关键字:Regex
--》引入命名空间 System.Text
常用的方法
1、 匹配:
--》Regex.IsMatch(要匹配的字符串,正则表达式); 判断指定的正则表达式和指定的字符串是否匹配
如果匹配返回true,否则返回false
Console.WriteLine("请输入邮政编码"); string regex = @"^\d{6}$"; if (Regex.IsMatch(Console.ReadLine(), regex)) { Console.WriteLine("输入正确"); } else { Console.WriteLine("error"); }
2、 提取:
-->Regex.Match(要提取的字符串,,正则表达式);
在指定的字符串中提取指定的正则表达式匹配的字符, Match只提取第一个匹配到的数据。
string regex = @"^(http|ftp)://\w+(\.\w+)+/\w+\.\w+\?\w+=\w+(&\w+=\w+)*"; string IP = "modaorong@qq.com"; string regex = @"\w+@(\w+\.\w+)/.*"; Match m = Regex.Match(IP, regex); Console.WriteLine(m.Groups[1].Value);
--》Regex.Matchs
Matchs提取所有需要的数据,
会返回一个MatchCollection集合,没一个匹配上的数据就是这个集合的一个元素
string time = "June 26, 1951"; string regex = @"(\w+)\s*(\d+),\s*(\d+)"; MatchCollection mc = Regex.Matches(time, regex); foreach (Match m in mc) { Console.WriteLine("月{0} 日{1} 年{2}", m.Groups[1].Value, m.Groups[2].Value, m.Groups[3].Value); }
3、提取组
()在正则表达式里的意思就是优先级和分组的意思,在正则表达式里没遇到一个左圆括号“(”就分一组,
如果没有分组那么整个匹配到的结果就是一组,也就是Groups[0], Groups[i].Value 就是匹配到的
数据的第i组的值
string day = "2012/05/30"; Console.WriteLine(Regex.Replace(day, @"(\d+)/(\d+)/(\d+)", "$1年$2月$3日"));
提取网页的html代码
--》WebClient类 (导入命名空间 System.net)
string str=实例名.DownloadString(IP地址); //会返回一个字符串
提取的结果乱码可以设置encoding属性
实例名.Encoding
贪婪模式与非贪婪模式
取消贪婪模式 +号后面加个?
如果不取消贪婪模式就会尽可能多的匹配,如果一个表达式里出现多个贪婪模式,那么第一个就会尽可能多的匹配,
后面的全都会默认的变成非贪婪,当第一个标记为非贪婪模式那么第二个就会贪婪后面的非贪婪
string path = @"C:\154\2FDF\3FF\4dfgf\5dgdgd\6gd\7dgd\8dgg\9dg\0.txt"; string regex = @"(.+)\\(.+)\\(.+)\\(\w+\.\w+)";//第一个.+是贪婪模式,所以会从尽可能多的匹配,所以第一个.+会一直匹配到7dgd\这里,而第二个第三个.+此时就默认为非贪婪模式, Match mc= Regex.Match(path, regex); //第二个会匹配8dgg,第三个匹配9dg Console.WriteLine("{0}\r\n{1}\r\n{2}",mc.Groups [1].Value ,mc.Groups [2].Value ,mc.Groups [3].Value ); Console.ReadKey();
扩展: 反斜线(*****)
在C#中 \表示转义, \\表示一个斜线(在文本中) \\\\表示正则表达式中的一个斜线
在正则表达式中 \ 表示转义 \\表示一个斜线(正则表达式中)
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/67622.html