正则表达式的初体验:分析字符串数据-阿里云开发者社区

开发者社区> 科技小能手> 正文

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

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

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

 

1 //要求整个数字可以有-号,精度必须为2
2 string pattern = @"^-?/d+(/./d{2})?$";
3 System.Text.RegularExpressions.Regex rx = new System.Text.RegularExpressions.Regex(pattern);
4 string[] patternTest ="-12.23""+12.23""22.3""22""=2.34""2.34.45""3242 ""343.343""" };
5 for (int i = 0; i <= patternTest.Length - 1; i++)
6 {
7 System.Console.WriteLine("{0} is {1}", patternTest[i], rx.IsMatch(patternTest[i]));
8 }
运行结果为
-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

修正了正则表达式,又可以对数据有其他的分析
1 string pattern = @"^[-|+]?/d+(/./d{0,2})?$";
2 System.Text.RegularExpressions.Regex rx = new System.Text.RegularExpressions.Regex(pattern);
3 string[] patternTest ="-12.23""+12.23""22.3""22""=2.34""2.34.45""32. ","343.343""" };
4 for (int i = 0; i <= patternTest.Length - 1; i++)
5 {
6 System.Console.WriteLine("{0} is {1}", patternTest[i], rx.IsMatch(patternTest[i]));
7 }

运行结果是
-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之类的软件是如何快速有效的分析出可以下载的地址的。 

 

1 string url = "Http://news.sina.com.cn";
2 System.Net.WebRequest request = System.Net.WebRequest.Create(url);
3 System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)request.GetResponse();
4 System.IO.Stream httpStream = response.GetResponseStream();
5 System.IO.StreamReader htmlRead = new System.IO.StreamReader(httpStream);
6 string html = htmlRead.ReadToEnd();
7
8 //System.Console.WriteLine(html); 
9
10
11 string pattern = @"http://([/w-]+/.)+[/w-]+(/[/w- ./?%&=]*)?";
12 System.Text.RegularExpressions.Regex rx = new System.Text.RegularExpressions.Regex(pattern);
13 System.Text.RegularExpressions.MatchCollection matches = rx.Matches(html);
14
15 for (int i = 0; i <= matches.Count - 1; i++)
16 {
17 System.Console.WriteLine(matches[i].Value);
18 }


运行结果是,显示所有连接,大致如下
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
 



本文转自shyleoking 51CTO博客,原文链接:http://blog.51cto.com/shyleoking/806259

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
数据库连接字符串
SQLServer 连接字符串 MySql 连接字符串 Data Source=127.0.0.1;Database=DBName;User Id=root;Password=root;
988 0
ML之FE:基于单个csv文件数据集(自动切分为两个dataframe表)利用featuretools工具实现自动特征生成/特征衍生
ML之FE:基于单个csv文件数据集(自动切分为两个dataframe表)利用featuretools工具实现自动特征生成/特征衍生
36 0
算法:字符串消除问题的数学证明
问题: 给定一个字符串,仅由A、B、C3个字母组成。当出现连续两个不同的字母时,你可以用另外一个字母替换它,如有AB或BA连续出现,你把它们替换为字母C;有AC或CA连续出现时,你可以把它们替换为字母B;有BC或CB连续出现时,你可以把它们替换为字母A。
477 0
纯C实现的词法分析和lex实现的词法分析的对比
版权声明:您好,转载请留下本人博客的地址,谢谢 https://blog.csdn.net/hongbochen1223/article/details/50523336 (一):写在前面 在上面的学习当中,我们通过简单的lex例子,进一步扩展lex例子,通过和yacc的融合来进行简单英语语法分析。
814 0
C实现特定字符串数据的排序与输出
一、案例完整代码 点击(此处)折叠或打开 /**************************************************************** * Name : sort_and_output.c * Author : dyli2000 * Date : 20121102 * Description :     对学生成绩由高到低输出案例。
847 0
CM android的CMUpdater分析(一)
版权声明:您好,转载请留下本人博客的地址,谢谢 https://blog.csdn.net/hongbochen1223/article/details/51123507 (一):写...
648 0
CM android的CMUpdater分析(二)
版权声明:您好,转载请留下本人博客的地址,谢谢 https://blog.csdn.net/hongbochen1223/article/details/51159435 至于为何要在这里讲解android系统源码中的系统更新,我已经在上一篇《 CM android的CMUpdater分析(一)》中介绍了。
873 0
23706
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载