我知道使用 urllib 你可以解析一个字符串并检查它是否是一个有效的 URL。但是如何去检查一个句子中是否包含一个 URL,然后提取那个 URL。我已经看到了一些巨大的正则表达式,但我宁愿不使用我真的无法理解的东西。
所以基本上我有一个输入字符串,我需要找到并提取该字符串中的所有 URL。
有什么干净的方法来解决这个问题。
您可以搜索包含的“单词” :
,然后将它们传递给urlparse
(urllib.parse
在 Python 3.0 和更新版本中重命名为)以检查它们是否是有效的 URL。
例子:
possible_urls = re.findall(r'\S+:\S+', text)
如果您只想将自己限制在以http://
or开头的 URL https://
(或您想要允许的任何其他内容),您也可以使用正则表达式来执行此操作,例如:
possible_urls = re.findall(r'https?://\S+', text)
您可能还想使用一些启发式方法来确定 URL 的开始和停止位置,因为有时人们会在 URL 中添加标点符号,从而提供新的有效但无意中不正确的 URL,例如:
您看到http://example.com/的新外观了吗?这完全是对http://example.org/的剽窃!
这里 URL 后面的标点不打算成为 URL 的一部分。从上述文本中自动添加的链接可以看出,StackOverflow 实现了这样的启发式。
从“野外”中提取 URL 是一项棘手的工作(要正确执行)。Jeff Atwood 写了一篇关于这个主题的博客文章:URL 的问题此外,John Gruber 也解决了这个问题:An Improvement Liberal, Accurate Regex Pattern for Matching URLs 另外,我还编写了一些代码来尝试解决这个问题:URL 链接 (HTTP/FTP)(用于 PHP/Javascript)。(请注意,我的正则表达式特别复杂,因为它旨在应用于 HTML 标记,并尝试跳过已经链接的 URL(即 <a href="http://example.com">Link!</a> )
其次,在验证URI/URL 时,您要查看的文档是RFC-3986。我一直在写一篇关于这个主题的文章:Regular Expression URI Validation。您可能也想看看这个。
但是,当您认真对待它时,这不是一项微不足道的任务!