我正在尝试为Postgres正则表达式查询转义字符串яблуко*
:
name = re.escape('яблуко*')
Model.objects.filter(name__iregex='^%s' % name)
这给了我:
无效的正则表达式:无效的escape \ sequence
我做错了什么?
P.S。我知道我可以用istartswith
来做,只是想知道为什么正则表达式不起作用。
答案 0 :(得分:2)
这里的问题是re.escape
对PostgreSQL来说太过分了 - 它确实逃脱了所有非ASCII字符,而PostgreSQL不支持未知字符的转义序列 - 在这种情况下它是'所有的unicode字符:
>>> print re.escape('яблуко*')
\я\б\л\у\к\о\*
最后,实际上不可能将Python regexp引擎(用于转义)与数据库regexp引擎(用于评估)混合使用。不幸的是,Django并没有提供这样做的方法。在Weblate中,我通过编写自定义函数来解决此问题以逃避正则表达式,请参阅https://github.com/WeblateOrg/weblate/commit/7425a749b44abafe36d8f1c9db018f57684e5983