У меня есть индекс, где поле данных - это тип ключевого слова. Я храню строку, подобную этой:
[a-zA-Z0-9.]+\@[a-zA-Z0-9]+\.[a-zA-Z]+
но когда я возвращаю его в Python из Elastic, я получаю строку, подобную этой (потому что она хранится в Elastic):
\\[a\\-zA\\-Z0\\-9\\.\\]\\+\\\\\\@\\[a\\-zA\\-Z0\\-9\\]\\+\\\\\\.\\[a\\-zA\\-Z\\]\\+
Как я могу вернуть его обратно в исходную форму на Python?
Я попытался сохранить его как поле двоичного типа и использовать encode/decode, но в основном я получаю ту же экранированную строку.
Я изменил идею, и я преобразовал строку в шестнадцатеричный, а затем сохранил это шестнадцатеричное значение в Elastic, потому что это нормальная строка, которую не нужно экранировать, а затем, когда я прочитал ее из Elastic, я просто возвращаю процесс следующим образом:
import binascii
# Convert string to hex
def toHex(text):
return binascii.hexlify(bytes(text, 'utf-8')).decode("utf-8")
# Convert hex to string
def toStr(text):
return binascii.unhexlify(bytes(text, 'utf-8')).decode("utf-8").replace('\\\\', '\\')
Это не прямой ответ на мой вопрос, но он работает для меня, поэтому, возможно, вы найдете его полезным.