我正在从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
库执行此操作?什么是合适的正则表达式?
答案 0 :(得分:3)
我已针对您请求的正则表达式进行了初步尝试:
(?<=\[.+\])\(.+\)
第一部分(?<=...)
位于后面,这意味着它在寻找但不匹配。您可以将此正则表达式与re's method sub一起使用。您还可以看到所有正则表达式符号here的含义。
您可以扩展上述正则表达式,以仅查找括号中具有网络链接的内容,例如:
(?<=\[.+\])\(https?:\/\/.+\)
此问题是,如果他们提供的链接不是以http或https开头,则会失败。
在此之后,您将需要删除方括号,也许只是删除所有方括号就可以了。
Valentino指出,replaces接受捕获组,这使您可以捕获文本并使用以下正则表达式替换掉text:
\[(.+)\]\(.+\)
然后您可以使用以下方法重新替换第一个捕获的组(在方括号中):
re.sub(r"\[(.+)\]\(.+\)", r"\1", original_text)
如果您想更详细地了解正则表达式(如果您不熟悉正则表达式或想了解它们的含义),我建议您使用online regex interpreter,它们会解释每个符号的作用及其含义。更容易阅读(尤其是当有很多转义的符号,例如此处的符号)时。