Dấu gạch chéo ngược được Django coi là siêu ký tự và được diễn giải bên trong dấu ngoặc kép. Vì vậy, một lớp của E'\\s+')
bị loại bỏ trước khi chuỗi đến máy chủ PostgreSQL, máy chủ này sẽ thấy E'\s+')
. Chuỗi thoát sẽ dẫn đến 's+'
đến lượt nó sẽ tạo ra regexp_split_to_table()
chia chuỗi của bạn theo bất kỳ số lượng s
nào thay vì không gian không in được, viết tắt của lớp ký tự \s
là viết tắt của cụm từ thông dụng.
Nhân đôi dấu gạch chéo ngược của bạn trong chuỗi để đạt được những gì bạn dự định:E'\\\\s+')
:
"SELECT regexp_split_to_table(field_name, E'\\\\s+') FROM mytable LIMIT 20"
Thay vào đó, để tránh các vấn đề với ý nghĩa đặc biệt của dấu gạch chéo ngược \
, bạn có thể sử dụng [[:space:]]
để biểu thị cùng một lớp ký tự:
"SELECT regexp_split_to_table(field_name, '[[:space:]]+') FROM mytable LIMIT 20"
Chi tiết trong chương " Khớp mẫu "trong sách hướng dẫn .