机器学习和生物信息学实验室联盟

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4053|回复: 3
打印 上一主题 下一主题

关于提取url的心得

[复制链接]
跳转到指定楼层
楼主
发表于 2011-7-3 15:58:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
       应林老师要求,谈谈这几天提取URL的心得体会。主要是正则表达式的使用。接到老师的任务后,我先上网查了相关文章,仿照网上的代码写了程序。不过提取的结果不理想。与老师探讨后,她给了我一些建议及一篇介绍正则式的文章。当晚浏览完那篇文章后,自觉任务不难,只要上网查下url的基本元素就能完事。不过第二天在查url时,却尽是一些关于url 组成的文章。无奈只好自己观察,写了个正则式。虽然提取结果较上次有所改进不过还是遇到一些问题:
     首先\w匹配字母数字下划线和汉字,在做实验的过程中发现用/w时一些自成单词也会被匹配,如“http://shindanmaker.com/79885安い女だなw”。所以如果所提取的URL中含自成单词,可用[a-zA-Z0-9_]代替\w。

     其次在提取的后期发现有些url中后面会跟着“.”如“http://bit.ly/cYHi...”一开始想到在正则式的最后加[^.],不过提取后发现“.”是去掉了,其他的字符却出现了。重新看了正则表达式的文章后,才明白虽然[^.]的意思是最后不能是“.”但也意味着其可以是除“.”外的任意字符,甚至包括空格。所以一些本来正确的url在正则式加了[^.]后反倒错了,如“ http://bit.ly/bxRm37(09:00)”。 本来(09:00)与前面的url隔着个空格是不会出现的,而现在空格也是合法的所以(09:00)就出现在所提取的url中。然后我试着用(?!\.)表达式来去除“.”结果同样遇到问题。因为(?!\.)的意思是匹配后面跟的不是“.”的位置。所以用(?!\.)的话虽然可以去掉“.”但其前面的一个字符也会被去掉。这个方案失败后我想了很久,也没能想出解决方案。只好向老师求救,老师给了我一个完整的正则表达式和一些建议。第二天在看老师的正则式时,突然想到既然不能规定url最后不能有什么,那就规定其最后只能有什么,于是我试着在老师的表达式最后加上 [a-zA-Z0-9\?/\!]+, 提取后结果比较满意。  虽然现在回想起来,觉得这方法并不是很巧妙,不过至少能解决那个困扰很久的问题,心里还是很高兴的。
    其实正如老师所言正则式虽入门容易,但要真正用好它却不容易。在此感谢林老师的悉心指导,让我学到了很多知识。
  
   以下是老师推荐的相关网站:
正则表达式的介绍: http://deerchao.net/tutorials/regex/regex.htm
url的命名规则:    http://en.wikipedia.org/wiki/Uniform_Resource_Locator
     还有其指导下的正则表达式
Pattern=@"(http|https|ftp)\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,\'/\\\+&%\$#\=~\!])*[a-zA-Z0-9\?/\!]+";
   上面的正则式只是一个参考,具体提取时,还应根据提取内容做修改。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享
回复

使用道具 举报

沙发
发表于 2011-7-3 19:44:41 | 只看该作者
不错,再附上software就完美了~~~
回复 支持 反对

使用道具 举报

板凳
发表于 2011-7-3 19:45:55 | 只看该作者
非常好.我们本科小同学谢思发独立的完成了一个利用正则表达式从文本中抽取URL的工作。这个工作虽然看似简单,但实际上和html中抽取url是不一样的,要考虑的情况更多。用户会修改url,如果掉以轻心采用网上常见的一些url模式去匹配就会出错。在这里感谢花丝谢的努力劳动!这也提示我们不管再小的工作,都要自己动手做一下,不要随便的轻信开源或者现成的代码。
回复 支持 反对

使用道具 举报

地板
发表于 2011-8-4 20:24:53 | 只看该作者
不错,不错!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

机器学习和生物信息学实验室联盟  

GMT+8, 2024-11-24 14:14 , Processed in 0.067925 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表