从文本中提取url的问题



我试图找到一个正则表达式来提取任何有效的url(不仅仅是http[s])使用正则表达式。不幸的是,每一个输出都很奇怪。我使用这个regex获得的最佳结果:

b((?:[a-z][w-]+:(?:/{1,3}|[a-z0-9%])|wwwd{0,3}[.]|[a-z0-9.-]+[.][a-z]{2,4}/)(?:[^s()<>]|((?:[^s()<>]|(?:([^s()<>]+)))*))+(?:((?:[^s()<>]|(?:([^s()<>]+)))*)|[^s`!()[]{};:'".,<>?«»“”‘’]))

但我至少可以标记以下问题:

  • http://208.206.41.61/email/email_log.cfm?useremail=3Dtana.jones@enron.com&=refdoc=3D(01-128)被提取为http://208.206.41.61/email/email_log.cfm?useremail=3Dtana.jones@enron.com&=
  • http://www.onlinefilefolder.com',AJAXTHRESHOLD不需要AJAXTHRESHOLD
  • CSS/HTML样式被提取,例如xmlns:x="urn:schemas-microsoft-com:xslt, ze:12px;color:#666, font-size:12px;color

我如何改进这个正则表达式,以确保只提取有效的url ?我不仅从HTML中提取,而且从纯文本中提取。因此,对于我的用例,只使用beautifulsoup是不可能的。

没有一个正则表达式是完美的,但是这个正则表达式可能会帮助你:

(?:(?:https?|ftp|file)://|www.|ftp.)(?:([-A-Z0-9+&@#/%=~_|$?!:,.]*)|[-A-Z0-9+&@#/%=~_|$?!:,.])*(?:([-A-Z0-9+&@#/%=~_|$?!:,.]*)|[A-Z0-9+&@#/%=~_|$])

启用标志:不敏感,全局,多行(igm))

来源:http://www.regexguru.com/2008/11/detecting-urls-in-a-block-of-text/

相关内容

  • 没有找到相关文章

最新更新