Python 排除几个词的正则表达式

Python regex to exclude several words

我尝试搜索 URLS 并想排除一些。在变量 download_artist 中,我存储了基础 URL 并希望找到其他链接,但不包括上传、收藏、关注或收听。

所以我用提到的词和一个 | 尝试了不同的版本。喜欢:

urls = re.findall(rf'^{download_artist}uploads/|{download_artist}^favorites/|^{download_artist}followers/|^{download_artist}listens/|{download_artist}\S+"', response.text, re.IGNORECASE)

或:

urls = re.findall(rf'{download_artist}^uploads/|^favorites/|^followers/|^listens/|\S+"', response.text, re.IGNORECASE)

但它忽略了我的 ^ 排除了这些词。我的错误在哪里?

^ 只能作为字符 类 在 [] 里面的否定,在外面代表输入的开始。

我建议您进行两次匹配:一次匹配所有网址,另一次匹配要排除的网址。然后从第一组中删除第二组 url。

这将使正则表达式简单易读。

如果您出于某种原因必须在一个正则表达式中执行此操作,您可以尝试使用(负)环视模式来解决它(参见 https://www.rexegg.com/regex-lookarounds.html)。

在这种情况下您需要使用 "lookaround",可以在 https://www.regular-expressions.info/lookaround.html 中查看更多详细信息。

所以,我认为这个正则表达式可以解决您的问题:

{download_artist}(?!uploads/|favorites/|followers/|listens/)\S+\"

您可以测试正则表达式是否在 https://regex101.com/ 中工作。当您使用正则表达式时,此站点非常有用。