只在Django查询中匹配单词

我正在尝试编写一个只能匹配整个单词的Django查询。 根据这里的答案,我尝试过这样的:

result = Model.objects.filter(text__iregex='bsomeWordb')

但是这并没有回报预期的结果。 我也试过了

result = Model.objects.filter(text__iregex=r'bsomeWordb')

无济于事。 我的最终目标是能够传递一个字符串变量,如下所示:

result = Model.objects.filter(text__iregex=r'b'+stringVariable+r'b')

要么

result = Model.objects.filter(text__iregex=r'b %s b'%stringVariable)

但现在我甚至无法使用原始字符串来处理它。 我正在使用PostgreSQL。


当您使用PostgreSQL时,使用“ y ”而不是“ b ”,这是因为Django将正则表达式直接传递给PostgreSQL - 所以您的RegEx需要与它兼容。 你应该可以在没有任何问题的情况下从psql执行它们。

result = Model.objects.filter(text__iregex=r"y{0}y".format(stringVariable))

见:http://bit.ly/ZtpojU


您可以通过删除正则表达式并使用一些django查找来获得某些内容

result = Model.objects.filter(Q(text__contains=' someword ') |
                              Q(text__contains=' someword.') |
                              Q(text__istartswith = 'someword.' |
                              Q(text__istartswith = 'someword.' |
                              Q(text__iendswith = 'someword')

看到这里的文档。

我意识到这不是那么高雅(但如果你不是正则表达式的粉丝,那么这样可以很容易地进行维护)。


我尝试使用Perl兼容转义序列 b来匹配单词边界时遇到了同样的问题。 我的后端数据库是MySQL。

我通过字符类表达式[[:space:]]解决了问题,例如

        q_sum = Q()
        search_list = self.form.cleaned_data['search_all'].split(' ');
        for search_item in search_list:
            search_regex = r"[[:space:]]%s[[:space:]]" % search_item
            q_sum |= Q(message__iregex=search_regex)
        queryset = BlogMessages.objects.filter(q_sum).distinct()
链接地址: http://www.djcxy.com/p/6589.html

上一篇: word match only in Django query

下一篇: Django strange icontains behaviour in development