【问题标题】:Find Hyperlinks in Text using Python (twitter related)使用 Python 在文本中查找超链接(与 Twitter 相关)
【发布时间】:2010-10-17 17:36:24
【问题描述】:

如何解析文本并找到所有带有字符串的超链接实例?超链接不是<a href="http://test.com">test</a>的html格式,而是http://test.com

其次,我想然后转换原始字符串并将所有超链接实例替换为可点击的html超链接。

我在这个帖子中找到了一个例子:

Easiest way to convert a URL to a hyperlink in a C# string?

但无法在 python 中重现它:(

【问题讨论】:

标签: python regex


【解决方案1】:

这是Easiest way to convert a URL to a hyperlink in a C# string?的Python端口:

import re

myString = "This is my tweet check it out http://tinyurl.com/blah"

r = re.compile(r"(http://[^ ]+)")
print r.sub(r'<a href="\1">\1</a>', myString)

输出:

This is my tweet check it out <a href="http://tinyurl.com/blah">http://tinyurl.com/blah</a>

【讨论】:

  • 可以通过添加对 https 或 ftp URL 的支持来改进它......另外,我相信方案 (http) 不区分大小写。
  • 请参阅stackoverflow.com/questions/1986059/… 以获得更好的正则表达式。
【解决方案2】:

Here 是 2002 年以来更加复杂的正则表达式。

@yoniLavi 将其缩小为:

re.compile(r'\b(?:https?|telnet|gopher|file|wais|ftp):[\w/#~:.?+=&%@!\-.:?\\-]+?(?=[.:?\-]*(?:[^\w/#~:.?+=&%@!\-.:?\-]|$))')

【讨论】:

  • 我发现它也很有用,并将其缩小为:re.compile(r'\b(?:https?|telnet|gopher|file|wais|ftp):[\w/#~:.?+=&amp;%@!\-.:?\\-]+?(?=[.:?\-]*(?:[^\w/#~:.?+=&amp;%@!\-.:?\-]|$))')
  • 好东西,但是如果 URL 没有 http:// 前缀怎么办。通常我们不再在电子邮件和社交媒体中指定该部分。
【解决方案3】:

Django 也有一个不仅仅使用正则表达式的解决方案。它是django.utils.html.urlize()。我发现这很有帮助,尤其是如果您碰巧使用 django。

您也可以提取code 以在您自己的项目中使用。

【讨论】:

    【解决方案4】:

    Jinja2(Flask 使用它)有一个过滤器urlize,它的作用相同。

    Docs

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-08
      • 2019-07-22
      • 2021-09-02
      • 1970-01-01
      • 2011-06-22
      • 2011-10-12
      • 2014-11-03
      • 2011-09-19
      相关资源
      最近更新 更多