Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无效的正则表达式:无效的escape\sequence、Postgres、Django_Python_Django_Postgresql - Fatal编程技术网

Python 无效的正则表达式:无效的escape\sequence、Postgres、Django

Python 无效的正则表达式:无效的escape\sequence、Postgres、Django,python,django,postgresql,Python,Django,Postgresql,我正试图为Postgres正则表达式查询转义字符串 name = re.escape('яблуко*') Model.objects.filter(name__iregex='^%s' % name) 这给了我: 无效的正则表达式:无效的转义\序列 我做错了什么 另外,我知道我可以使用istartswith,只是想知道为什么正则表达式不工作。这里的问题是re.escape对PostgreSQL的转义太多了-它转义了所有非ASCII字符,虽然PostgreSQL不支持未知字符的转义序列,但在本

我正试图为Postgres正则表达式查询转义字符串

name = re.escape('яблуко*')
Model.objects.filter(name__iregex='^%s' % name)
这给了我:

无效的正则表达式:无效的转义\序列

我做错了什么


另外,我知道我可以使用
istartswith
,只是想知道为什么正则表达式不工作。

这里的问题是
re.escape
对PostgreSQL的转义太多了-它转义了所有非ASCII字符,虽然PostgreSQL不支持未知字符的转义序列,但在本例中,它是所有unicode字符:

>>> print re.escape('яблуко*')
\я\б\л\у\к\о\*

最后,将Python regexp引擎(用于转义)与数据库regexp引擎(用于计算)混合使用是不可能的。不幸的是,Django没有提供这样做的方法。在中,我通过编写自定义函数来转义regexp解决了这个问题,请参见

我无法重现您的错误。请包含完整的错误消息。为什么要使用
re.escape
?它不应该是Model.objects.filter(name_uu-iregex=r'ббббббббб*)
?另外,如果在queryset筛选器之前打印,
name
会是什么样子?为什么不打印
name=r'ббббббö*'
?问题在于Python正则表达式方言是PCRE()的变体,而PostgreSQL使用POSIX正则表达式()。这里引用的函数转义POSIX正则表达式特殊字符,以及NUL字符(尽管不清楚是否需要)。