regex - Django 。 PostgreSQL。 regexp_split_to_table 不工作

标签 regex django postgresql escaping

我正在尝试使用查询标记我的表字段。

SELECT regexp_split_to_table(mytable.field_name, E'\\s+') from mytable limit 20;

当我从 psql shell 执行它时这有效但是当我这样做时:

from django.db import connection cursor=connection.cursor() 
cursor.execute("SELECT regexp_split_to_table(mytable.field_name,E'\\s+')
                FROM mytable LIMIT 20") 
cursor.fetchall()

...它无法返回 token 。我做错了什么?

最佳答案

Django 将反斜杠视为元字符,并在双引号内进行解释。 因此,在字符串到达​​ PostgreSQL 服务器之前,一层 E'\\s+') 被剥离,它将看到 E'\\s+')。转义字符串将导致 's+',这反过来将使 regexp_split_to_table() 在任意数量的 s 处拆分您的字符串,而不是非打印空间,字符类简写 \s 在正则表达式中代表。

将字符串中的反斜杠加倍以获得您想要的内容:E'\\\\s+'):

"SELECT regexp_split_to_table(field_name, E'\\\\s+') FROM mytable LIMIT 20"

作为替代方案,为了避免反斜杠 \ 的特殊含义出现问题,您可以使用 [[:space:]] 来表示相同的字符类:

"SELECT regexp_split_to_table(field_name, '[[:space:]]+') FROM mytable LIMIT 20"

详见章节"Pattern Matching" in the manual .

关于regex - Django 。 PostgreSQL。 regexp_split_to_table 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8907041/

相关文章:

c# - 正则表达式匹配所有除非?

Django restframework generics.ListCreateAPIView 返回类似对象的列表

python - 向 Django 应用程序添加简单搜索

python - 如何使用 Django 的内置框架为评论添加确认消息?

javascript - 查询 Sequelize 模型以匹配多个关联

postgresql - Postgres PL/pgSQL递归计算

正则表达式 - 忽略引号

c++ - <regex> 无法处理西里尔字母字符

regex - 正则表达式中的 $/和 $¢ 有什么区别?

python - 无限滚动条不适用于 django