正则表达式捕获任何HTTP地址

时间:2011-06-30 08:32:47

标签: python regex

我正在努力编写一个应该捕获任何http地址的正则表达式。 (背景:我想在tkinter窗口中使用它,一个简单的编辑器,将http地址转换为可点击的链接) 由于它们有多复杂,哪个是更好的正则表达式?

的Alessandro

3 个答案:

答案 0 :(得分:1)

考虑到Punycode带来的可能性,我认为使用RegEx几乎不可能做到这一点。

当然,您可以将视图限制为ASCII网址。

您应该查看Regular Expression Library

答案 1 :(得分:1)

使用A regex that validates a web address and matches an empty string?作为答案的基础。

假设HTTP(或HTTPS)地址:

  • 以“http://”或“https://”
  • 开头
  • 至少包含一个“。”在TLD和域名之间
  • 域名由字母,数字_和 -
  • 组成
  • 网址最后用空格分隔,可以包含任何其他字符

然后正则表达式可以是'(http | https):// [\ w-] +(。[\ w-] +)+ \ S *'

>>> import re
>>> re.sub("(http|https)://[\w\-]+(\.[\w\-]+)+\S*", "### URL ###", "There is an URL in this string : https://stackoverflow.com/questions/6532089/regex-to-catch-any-http-address and it is followed by text")
'There is an URL in this string : ### URL ### and it is followed by text'

但它没有检测到URL后的标点符号。

答案 2 :(得分:1)

在tornado.escape模块中,这是一个很好的方法“linkify”。 您可以在此处查看来源:escape.py ps:我想把这篇文章添加为评论,但我没有足够的权限,但无论如何我希望你发现它有用。