删除文本中的标记链接

时间:2018-12-30 18:01:25

标签: python regex

我正在从Reddit清除一些文本。当您在Reddit自文本中包含链接时,您将像这样进行操作: [the text you read](https://website.com/to/go/to)。我想使用正则表达式删除超链接(例如https://website.com/to/go/to),但保留the text you read

这里是另一个示例:

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

我想保留:the podcast list

如何使用Python的re库执行此操作?什么是合适的正则表达式?

1 个答案:

答案 0 :(得分:3)

我已针对您请求的正则表达式进行了初步尝试:

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

第一部分(?<=...)位于后面,这意味着它在寻找但不匹配。您可以将此正则表达式与re's method sub一起使用。您还可以看到所有正则表达式符号here的含义。

您可以扩展上述正则表达式,以仅查找括号中具有网络链接的内容,例如:

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

此问题是,如果他们提供的链接不是以http或https开头,则会失败。

在此之后,您将需要删除方括号,也许只是删除所有方括号就可以了。


编辑1:

Valentino指出,replaces接受捕获组,这使您可以捕获文本并使用以下正则表达式替换掉text:

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

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

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

如果您想更详细地了解正则表达式(如果您不熟悉正则表达式或想了解它们的含义),我建议您使用online regex interpreter,它们会解释每个符号的作用及其含义。更容易阅读(尤其是当有很多转义的符号,例如此处的符号)时。