2011-03-10 98 views
2

我已经对我的mysql数据库中的一列执行了全文索引。我想使用正则表达式过滤功能。我认为这两个是相同的。为什么Django的__regex不能像我想的那样工作?

>>> 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

要扩大加雷思的答案。 Mysql有它自己的一套转义规则。例如[[:alpha:]]是mysql说的\w

回答

3

Django __regex过滤器使用底层数据库的正则表达式工具,在你的情况是MySQL。看起来,MySQL对你列出的正则表达式的解释与Python的不一样。 (我认为 - 但我基于简单的网络搜索而不是任何更原则的东西,所以不要相信它 - MySQL可能将\w视为w。)

+0

非常有趣。看起来你是对的。 'ww'和'\ w {2}'返回相同的结果数(16)。这真的很蹩脚。 – chriscauley 2011-03-10 22:04:57

+0

MySQL使用POSIX正则表达式的不是Perl风格的正则表达式。 https://dev.mysql.com/doc/refman/5.1/en/regexp.html – 2015-01-21 15:51:02

相关问题