Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python—解析URL的字符串并提取它们_Python_Regex_Url_Urlparse - Fatal编程技术网

Python—解析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

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

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

这是一个干净的方法。

您可以搜索包含
的“单词”,然后将它们传递到(在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可能根本不包含
://