Почему Django __regex не работает так, как я думал? - PullRequest
2 голосов
/ 11 марта 2011

Я выполнил полнотекстовое индексирование для столбца в моей базе данных 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 неверна.

EDIT:

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

Чтобы расширить ответ Гарета. Mysql имеет свой собственный набор правил экранирования. Например, [[:alpha:]] является mysql говорят для \w

1 Ответ

3 голосов
/ 11 марта 2011

Фильтр Django __regex использует функцию регулярного выражения базовой базы данных, которая в вашем случае является MySQL.Похоже, что интерпретация MySQL регулярного выражения, которое вы перечисляете, не совпадает с интерпретацией Python.(Я думаю - но я основываю это на кратком веб-поиске, а не на чем-то более принципиальном, поэтому не верьте этому - MySQL может трактовать \w как просто означающее w.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...