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/ 中工作。当您使用正则表达式时,此站点非常有用。
我尝试搜索 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/ 中工作。当您使用正则表达式时,此站点非常有用。