为什么Django的__regex不能像我想的那样工作?

时间:2011-03-10 21:42:22

标签: mysql regex django filtering

我在mysql数据库的列上执行了全文索引。我想使用正则表达式过滤功能。我认为这两个是等价的。

>>> sum([bool(re.findall(r'\w+',p.abstract)) for p in Publication.objects.all()])
8467
>>> Publication.objects.filter(abstract__regex=r"\w+").count()
7974

如果我使用更复杂的正则表达式,我会得到更多不同的结果。例如,\W{2}分别返回13和8039。我在这里错过了什么?很明显,我对__regex的解释是不正确的。

修改

http://dev.mysql.com/doc/refman/5.1/en/regexp.html

扩展Gareth的答案。 Mysql拥有它自己的一组转义规则。例如[[:alpha:]]是mysql代表\w

1 个答案:

答案 0 :(得分:3)

Django __regex过滤器使用底层数据库的正则表达式工具,在您的情况下是MySQL。看来MySQL对你列出的正则表达式的解释与Python不同。 (我认为 - 但我基于简短的网络搜索,而不是更有原则的,所以不要相信它--MySQL可能会将\w视为仅仅意味着w。)