匹配任何http地址的正则表达式

2 投票
3 回答
4971 浏览
提问于 2025-04-16 20:34

我正在努力写一个正则表达式,用来匹配任何http地址。
(背景:我想在一个tkinter窗口里使用它,这是一个简单的编辑器,目的是把http地址变成可以点击的链接)
因为http地址可能很复杂,所以我想知道哪个正则表达式更好。

alessandro

3 个回答

1

这段内容是基于一个问题,讨论如何用正则表达式来验证一个网址,并且可以匹配空字符串。

假设一个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'

不过,这个表达式无法检测网址后面的标点符号。

1

考虑到带来的各种可能性,我觉得用正则表达式来实现这个几乎是不可能的。

当然,你可以把范围限制在ASCII字符的URL上。

你可以看看<正则表达式库>。

1

在tornado.escape这个模块里,有一个很不错的方法叫做“linkify”。这个方法可以帮助你处理链接。你可以在这里查看源代码:escape.py
顺便说一下,我本来想把这个内容作为评论添加上去,但我没有足够的权限,不过希望你觉得这个信息有用。

撰写回答