代码之家  ›  专栏  ›  技术社区  ›  Demetri Pananos

删除文本中的标记链接

  •  3
  • Demetri Pananos  · 技术社区  · 7 年前

    我正在清理Reddit的一些文本。当您在Reddit自身文本中包含链接时,您会这样做: [the text you read](https://website.com/to/go/to) . 我想使用regex删除超链接(例如 https://website.com/to/go/to 但保持 the text you read .

    下面是另一个例子:

    [the podcast list](https://www.reddit.com/r/datascience/wiki/podcasts)

    我想保留: the podcast list .

    我怎么用蟒蛇的呢 re 图书馆?什么是合适的正则表达式?

    1 回复  |  直到 7 年前
        1
  •  4
  •   Adam Dadvar    7 年前

    我在您请求的regex上创建了一个初始尝试:

    (?<=\[.+\])\(.+\)
    

    第一部分 (?<=...) 是后面的一个视图,这意味着它查找它,但与它不匹配。你可以把这个regex和 re's method sub . 您还可以看到所有regex符号的含义。 here .

    您可以扩展上面的regex,只查找括号中有weblink的内容,例如:

    (?<=\[.+\])\(https?:\/\/.+\)
    

    问题在于,如果他们提供的链接不是以HTTP或HTTPS启动的,那么它将失败。

    在这之后,您将需要删除方括号,也许只是删除所有方括号的工作对您很好。


    编辑1:

    瓦伦蒂诺指出,substitute接受捕获组,这允许您捕获文本并使用以下regex替换回文本:

    \[(.+)\]\(.+\)
    

    然后,您可以使用以下方法替换第一个捕获的组(在方括号中):

    re.sub(r"\[(.+)\]\(.+\)", r"\1", original_text)
    

    如果您想更详细地了解regex(如果您是regex新手或想了解它们的含义),我建议您 online regex interpreter 它们解释了每个符号的作用,使其更容易阅读(特别是当有很多像这里一样的转义符号时)。