C# 正则表达式
正则表达式是个非常重要的工具,最早在Perl等脚本语言中广泛使用。它语法简单,但功能强大,可以从大量的字符串当中快速的筛选出自己想要的内容。
下面列举一些常用的基本的正则表达式,以备查询使用。
1、正则分割字符串
string test = "XXXX|YYY|ZZZZ"; string[] result = Regex.Split(test, "[|]");//按照|对原字符串进行分割 result.ToList().ForEach(x => Console.WriteLine(x));//XXXX,YYY,ZZZZ
//以ab分割,分割结果:ab cccd ab bb ab cc ab string input = "abcccdabbbabccab"; string[] strs = Regex.Split(input, @"(?=ab)|(?<=ab)"); foreach (string str in strs) { Console.WriteLine(str); }
2、看超链接是否匹配
string str = "1.asp?id=100"; Regex regex = new Regex(@"1.asp\?id\=(\d+)", RegexOptions.IgnoreCase); Console.WriteLine(regex.IsMatch(str));//True
3、筛选内容
Match m = Regex.Match(@"<span class='blocking-flag'>紧急</span>", @"(?is)(?<=<span[^>]+>).+?(?=</span>)"); Console.WriteLine(m.Value);//紧急
string s = "34234234@435345&&1||234234@6234235&&12342@564524"; MatchCollection mc = Regex.Matches(s, @"\d+(@\d+)?"); foreach (Match item in mc) { //加?输出结果包含1,否则结果为:34234234@435345、234234@6234235、12342@564524 Console.WriteLine(item.Value); }
string s = @"aaa.com.net.org b.net.org.cn c.org.cn.dd"; MatchCollection mc = Regex.Matches(s, @"\w+.\w+.(?<name>\w+.(org|cn|dd))"); foreach (Match item in mc) { //匹配域名 net.org|org.cn|cn.dd Console.WriteLine(item.Groups["name"].Value); }
4、内容替换
string result = Regex.Replace("数码产品(15),MP3(15),日常用品(12),IT产品(12)", @"\(\d+\)", ""); Console.WriteLine(result);//数码产品,MP3,日常用品,IT产品
string s1 = "今天的号码是12345689请拨打"; string result = Regex.Replace(s1, @"\d{8,11}", "<a href=\"tel:$0\">$0</a>"); Console.WriteLine(result);//今天的号码是<a href="tel:12345689">12345689</a>请拨打
5、去除空格
string result = " 我 的 中 国 心 "; result = string.Join("", result.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries));//我的中国心 result = Regex.Replace(result, @"[\s{1,}]{1,}", "");//我的中国心
6、请求网址获得链接
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("xxx");//xxx为请求的url HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream stream = response.GetResponseStream(); StreamReader reader = new StreamReader(stream, Encoding.Default); string block = reader.ReadToEnd();//获取返回的html MatchCollection matches = Regex.Matches(block,@"(?i)<a[^>]*href=([""'])?(?<href>[^'""]+)\1[^>]*>"); foreach (Match match in matches) { //match; 获得每个诸如<a href='www.baidu.com'>百度一下</a> //match.Groups["href"].Value; 获得每个诸如www.baidu.com }
7、将字符串的中文部分替换
Regex.Replace("1354444444张,1434324李,王028-4433434", @"[\u4e00-\u9fa5]", "");
至于为什么是\u4e00到\u9fa5,参见:http://zh.wikibooks.org/wiki/Unicode/4000-4FFF。
8、身份证格式验证
public static bool ValidateIdentitycard(string identityCard) { return Regex.IsMatch(identityCard, @"^(\d{15}$|^\d{18}$|^\d{17}(\d|X|x))$"); }
9、取div块中的内容
string input = "<div class=\"xxxx\">aaaa</div>"; string pattern = "(?is)<div class=\"xxxx\">(?<value>.*?)</div>"; Match match = Regex.Match(input, pattern); Console.WriteLine(match.Groups["value"].Value);//aaaa
10、去重
string S = "123,12345,14564789,123,456789,456789,454564645,"; var result = string.Join(",", S.TrimEnd(',').Split(',').Distinct()); Console.WriteLine(result);//123,12345,14564789,456789,454564645
最后附一些相关链接:
正则表达式语言-快速参考 http://msdn.microsoft.com/zh-cn/library/vstudio/az24scfc(v=vs.110).aspx
正则表达式语法 http://msdn.microsoft.com/zh-cn/library/ae5bf541(v=vs.100).aspx