正则表达式的初体验:分析字符串数据

本文介绍如何使用正则表达式进行高效的数据分析,包括验证数值格式和从网页中抓取URL链接。
在程序中,对于数据的分析是非常重要及常见的。对于字符串数据的分析,往往就是对字符串的内容提取,捕获和替换。除非你要做的分析是简单的要求,否则你就不要再使用string的IndexOf、LastIndexOf、StartsWith 和 EndsWith 方法了,而是应该改用正则表达式搜索字符串。
正则表达式虽然学习起来非常的另人头痛和难过,但他也实在是非常的有效。
.NET Framework 正则表达式引擎是回溯的正则表达式匹配器,它并入了传统的非确定性有限自动机 (NFA) 引擎,虽然相比纯正则表达式确定性有限自动机 (DFA) 引擎来讲,速度上面有点慢,但功能更加强大了。

通过强大的正则表达式,可以作很多分析服务

1None.gif//要求整个数字可以有-号,精度必须为2
2None.gifstringpattern=@"^-?/d+(/./d{2})?$";
3None.gifSystem.Text.RegularExpressions.Regexrx=newSystem.Text.RegularExpressions.Regex(pattern);
4ExpandedBlockStart.gifContractedBlock.gifstring[]patternTest=dot.gif{"-12.23","+12.23","22.3","22","=2.34","2.34.45","3242","343.343",""};
5None.giffor(inti=0;i<=patternTest.Length-1;i++)
6ExpandedBlockStart.gifContractedBlock.gifdot.gif{
7InBlock.gifSystem.Console.WriteLine("{0}is{1}",patternTest[i],rx.IsMatch(patternTest[i]));
8ExpandedBlockEnd.gif}
运行结果为
-12.23 is True
+12.23 is False
22.3 is False
22 is True
=2.34 is False
2.34.45 is False
3242 is False
343.343 is False
is False

修正了正则表达式,又可以对数据有其他的分析
1None.gifstringpattern=@"^[-|+]?/d+(/./d{0,2})?$";
2None.gifSystem.Text.RegularExpressions.Regexrx=newSystem.Text.RegularExpressions.Regex(pattern);
3ExpandedBlockStart.gifContractedBlock.gifstring[]patternTest=dot.gif{"-12.23","+12.23","22.3","22","=2.34","2.34.45","32.","343.343",""};
4None.giffor(inti=0;i<=patternTest.Length-1;i++)
5ExpandedBlockStart.gifContractedBlock.gifdot.gif{
6InBlock.gifSystem.Console.WriteLine("{0}is{1}",patternTest[i],rx.IsMatch(patternTest[i]));
7ExpandedBlockEnd.gif}

运行结果是
-12.23 is True
+12.23 is True
22.3 is True
22 is True
=2.34 is False
2.34.45 is False
32. is False
343.343 is False
is False

依据这个例子,可以作一个很有效的分析用户输入的程序了


以下是一个向远程请求http页面的,根据返回的结果,查找url连接的demo,可以根据这个demo了解象FlashGet之类的软件是如何快速有效的分析出可以下载的地址的。

1None.gifstringurl="Http://news.sina.com.cn";
2None.gifSystem.Net.WebRequestrequest=System.Net.WebRequest.Create(url);
3None.gifSystem.Net.HttpWebResponseresponse=(System.Net.HttpWebResponse)request.GetResponse();
4None.gifSystem.IO.StreamhttpStream=response.GetResponseStream();
5None.gifSystem.IO.StreamReaderhtmlRead=newSystem.IO.StreamReader(httpStream);
6None.gifstringhtml=htmlRead.ReadToEnd();
7None.gif
8None.gif//System.Console.WriteLine(html);
9None.gif
10None.gif
11None.gifstringpattern=@"http://([/w-]+/.)+[/w-]+(/[/w-./?%&=]*)?";
12None.gifSystem.Text.RegularExpressions.Regexrx=newSystem.Text.RegularExpressions.Regex(pattern);
13None.gifSystem.Text.RegularExpressions.MatchCollectionmatches=rx.Matches(html);
14None.gif
15None.giffor(inti=0;i<=matches.Count-1;i++)
16ExpandedBlockStart.gifContractedBlock.gifdot.gif{
17InBlock.gifSystem.Console.WriteLine(matches[i].Value);
18ExpandedBlockEnd.gif}


运行结果是,显示所有连接,大致如下
http://www.nen.com.cn/ target=_blank
http://www.tianshannet.com.cn/ target=_blank
http://www.nmgcb.com.cn/ target=_blank
http://www.jxcn.cn/ target=_blank
http://www.szed.com/ target=_blank
http://www.hljdaily.com.cn/ target=_blank
http://www.hifly.tv/ target=_blank
http://www.chinalegalnews.com.cn/ target=_blank
http://www.newssc.org
http://www.sconline.com.cn/ target=_blank
http://www.xawb.com/gb/news/node_2.htm target=_blank
http://www.anhuinews.com/ target=_blank
http://www.xinminweekly.com.cn/ target=_blank
http://news.cnhubei.com/ target=_blank
http://www.sdnews.com.cn/ target=_blank
http://www.qingdaonews.com/ target=_blank
http://www.dzwww.com/ target=_blank
http://www.66wz.com/cmsweb/webportal/ target=_blank
http://www.bjd.com.cn/ target=_blank
http://www.beijing.org.cn
http://news.sina.com.cn/media.html target=_blank
http://image2.sina.com.cn/c.gif width=1 height=1
http://tech.sina.com.cn/focus/sinahelp.shtml target=_blank
http://net.china.cn/chinese/index.htm target=_blank
http://corp.sina.com.cn/chn/ class=sinatail
http://corp.sina.com.cn/eng/ class=sinatail
http://ads.sina.com.cn/ class=sinatail
http://www.sina.com.cn/contactus.html class=sinatail
http://corp.sina.com.cn/chn/sina_job.html class=sinatail
http://www.sina.com.cn/intro/lawfirm.shtml class=sinatail
http://english.sina.com
http://members.sina.com.cn/apply/ class=sinatail
http://tech.sina.com.cn/focus/sinahelp.shtml class=sinatail
http://www.sina.com.cn/intro/copyright.shtml class=sinatail
http://ad4.sina.com.cn/200702/13/82610_news-couple-l.swf
http://ad4.sina.com.cn/200702/13/82609_news-couple-r.swf
http://ad4.sina.com.cn/sina/ae/ad_src/couplet/coupletv4.js
http://rm.sina.com.cn/icast/rotator.js
http://cast.icast.com.cn/a/4/4/1/9/1/389.js
http://image2.sina.com.cn/unipro/pub/getclickinfo_sinahome.js

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值