gpt4 book ai didi

regex - 高效的 Django QuerySet 正则表达式

转载 作者:行者123 更新时间:2023-12-05 00:43:00 27 4
gpt4 key购买 nike

我有一个这样的模型:

class CampaignPermittedURL(models.Model):
hostname = models.CharField(max_length=255)
path = models.CharField(max_length=255,blank=True)

通常,我会收到一个 URL,我可以将其 urlsplit 拆分为主机名和路径。我希望最终用户能够输入主机名(yahoo.com)和可能的路径(婚礼)。

我想查找 URL 何时与该主机名/路径组合不“匹配”,如下所示:
  • 成功:
    www.yahoo.com/weddings/newyork
  • 成功:yahoo.com/weddings
  • 失败:
    cnn.com
  • 失败:cnn.com/weddings

  • 我认为最好的方法是:
    url = urlsplit("http://www.yahoo.com/weddings/newyork")
    ### split hostname on . and path on /
    matches = CampaignPermittedURL.objects.filter(hostname__regex=r'(com|yahoo.com|www.yahoo.com)'), \
    path__regex=r'(weddings|weddings/newyork)')

    有人有更好的想法吗?我正在使用 PostgreSQL否则想尝试 Django Full Text Search但我不确定这是否值得,或者它是否真的比这更适合我的需求。还有其他方法同样快吗?

    请记住,我的方法具有传递给它的 URL,并且 CampaignPermittedURL 对象可能有数百条记录。我首先要寻找可扩展/可维护的解决方案,但它也需要高效,因为这将扩展到每秒数百个调用。

    我也可以使用另一个后端( Sphinx ?),但我最关心的是尽可能地使用标准 Django。

    最佳答案

    正则表达式:^(http\:\/\/)?(www\.)?yahoo\.com(\/.+)?$

    http://www.yahoo.com/weddings/newyork pass
    www.yahoo.com/weddings/foo pass
    www.yahoo.com/weddings pass
    www.yahoo.com pass

    yahoo.com/weddings/foo pass
    yahoo.com/weddings pass
    yahoo.com pass

    cnn.com/weddings/foo fail
    cnn.com/weddings fail
    cnn.com fail

    关于regex - 高效的 Django QuerySet 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1533958/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com