Python—解析URL的字符串并提取它们
我知道使用urllib可以解析字符串并检查它是否是有效的URL。但是如何检查句子中是否包含URL,然后提取该URL呢。我已经看到了一些巨大的正则表达式,但我宁愿不使用我真的无法理解的东西 所以基本上我有一个输入字符串,我需要找到并提取该字符串中的所有URL 这是一个干净的方法。您可以搜索包含Python—解析URL的字符串并提取它们,python,regex,url,urlparse,Python,Regex,Url,Urlparse,我知道使用urllib可以解析字符串并检查它是否是有效的URL。但是如何检查句子中是否包含URL,然后提取该URL呢。我已经看到了一些巨大的正则表达式,但我宁愿不使用我真的无法理解的东西 所以基本上我有一个输入字符串,我需要找到并提取该字符串中的所有URL 这是一个干净的方法。您可以搜索包含:的“单词”,然后将它们传递到(在Python 3.0及更新版本中重命名为urllib.parse)以检查它们是否是有效的URL 例如: possible_urls = re.findall(r'\S+:\S
:
的“单词”,然后将它们传递到(在Python 3.0及更新版本中重命名为urllib.parse
)以检查它们是否是有效的URL
例如:
possible_urls = re.findall(r'\S+:\S+', text)
如果您只想将自己限制为以http://
或https://
开头的URL(或您希望允许的任何其他URL),您也可以使用正则表达式执行此操作,例如:
possible_urls = re.findall(r'https?://\S+', text)
您可能还希望使用一些启发式方法来确定URL的开始和停止位置,因为有时人们会向URL添加标点符号,从而生成新的有效但无意中不正确的URL,例如:
possible_urls = re.findall(r'https?://\S+', text)
你看过我的新衣服了吗?这完全是剽窃
此处,URL后面的标点符号不是URL的一部分。您可以从上面文本中自动添加的链接中看到StackOverflow实现了这样的启发。从“野生”中提取URL是一项棘手的工作(要正确操作)。杰夫·阿特伍德(Jeff Atwood)就这个问题写了一篇博文:此外,约翰·格鲁伯(John Gruber)也解决了这个问题:此外,我还编写了一些代码,试图解决这个问题:(针对PHP/Javascript)。(请注意,我的正则表达式特别复杂,因为它被设计用于HTML标记,并试图跳过已经链接的URL(即)
其次,当涉及到验证URI/URL时,您要查看的文档是。我一直在写一篇文章,讨论这个主题:。您可能还想看看这个
但是,当你开始做这件事时,这不是一件小事!如果你的输入源是html或xml,不要这样做,请使用合适的解析器。你能发布一个典型的输入示例吗?URL匹配是一个非常大的主题,有很多规则……这就是为什么你发现的所有正则表达式都很大,很难理解的原因。试着检查一下这个正则表达式(拆分以匹配不同的URL部分):
://
是常见的,但URL可能根本不包含://
。