Python - 解析URL的字符串并将其解压缩

时间:2011-03-19 19:25:58

标签: python regex url urlparse

我知道使用urllib你可以解析一个字符串并检查它是否是一个有效的URL。但是如何判断一个句子是否包含其中的URL,然后提取该URL。我在那里看到了一些巨大的正则表达式,但我宁愿不使用我真正无法理解的东西。

所以基本上我有一个输入字符串,我需要查找并提取该字符串中的所有URL。

这是一个干净利落的方式。

2 个答案:

答案 0 :(得分:2)

您可以搜索包含:的“字词”,然后将其传递给urlparse(在Python 3.0及更新版本中重命名为urllib.parse),以检查它们是否为有效网址。

示例:

possible_urls = re.findall(r'\S+:\S+', text)

如果您只想限制以http://https://(或您想要允许的任何其他内容)开头的网址,您也可以使用正则表达式执行此操作,例如:

possible_urls = re.findall(r'https?://\S+', text)

您可能还想使用一些启发式方法来确定网址的开始和停止位置,因为有时人们会在网址中添加标点符号,从而提供新的有效但无意的错误网址,例如:

  

你看过http://example.com/的新面貌了吗?这是http://example.org/的总冲突!

此处URL后的标点符号不是URL的一部分。您可以从上面文本中自动添加的链接中看到StackOverflow实现了这种启发式方法。

答案 1 :(得分:1)

从“野外”中取出网址是一项棘手的工作(正确地做)。 Jeff Atwood写了一篇关于这个主题的博客文章:The Problem With URLs此外,John Gruber也解决了这个问题:An Improved Liberal, Accurate Regex Pattern for Matching URLs此外,我还编写了一些试图解决这个问题的代码:{{3} (对于PHP / Javascript)。 (请注意,我的正则表达式特别复杂,因为它旨在应用于HTML标记,并尝试跳过已经链接的URL(即< a href =“http://example.com”> Link!< / A&GT)

其次,当涉及验证 URI / URL时,您要查看的文档是URL Linkification (HTTP/FTP)。我一直在写一篇关于这个主题的文章:RFC-3986。你可能也想看看这个。

但是当你接受它时,这不是一项微不足道的任务!