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