-1

我尝试搜索 URLS 并希望排除一些。在变量 download_artist 中,我存储了基本 URL 和 wanto 以查找其他链接,但没有上传、收藏、关注或收听。

所以我用提到的单词和 | 尝试了不同的版本。像:

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)

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

4

2 回答 2

1

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

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

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

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

于 2020-04-14T18:59:02.133 回答
0

^ 仅在 [] 内部的字符类中用作否定,在外部它表示输入的开始。

我建议你做两个匹配:一个匹配所有 url,另一个匹配要排除的 URL。然后从第一组中删除第二组 url。

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

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

于 2020-04-14T18:46:57.753 回答