Ukośnik odwrotny jest traktowany przez Django jako metaznak i jest interpretowany wewnątrz podwójnych cudzysłowów. Tak więc jedna warstwa E'\\s+')
zostaje usunięty, zanim ciąg dotrze do serwera PostgreSQL, który zobaczy E'\s+')
. Łańcuch ucieczki da w wyniku 's+'
co z kolei spowoduje, że regexp_split_to_table()
podziel swoje ciągi na dowolną liczbę s
zamiast przestrzeni niedrukowalnej, która jest skrótem klasy znaku \s
oznacza w wyrażeniach regularnych.
Podwój swoje odwrotne ukośniki w ciągu, aby uzyskać to, co zamierzałeś:E'\\\\s+')
:
"SELECT regexp_split_to_table(field_name, E'\\\\s+') FROM mytable LIMIT 20"
Alternatywnie, aby uniknąć problemów ze specjalnym znaczeniem odwrotnego ukośnika \
, możesz użyć [[:space:]]
do oznaczenia tej samej klasy znaków:
"SELECT regexp_split_to_table(field_name, '[[:space:]]+') FROM mytable LIMIT 20"
Szczegóły w rozdziale " Dopasowywanie wzorców” w instrukcji .