Экранирование специальных символов в запросе Vespa YQL `matches`Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Экранирование специальных символов в запросе Vespa YQL `matches`

Сообщение Anonymous »

Методом проб и ошибок я обнаружил, что специальные символы, требующие escape-символов в запросе Vespa match, включают в себя больше, чем просто символы кавычки " и обратной косой черты \, отмеченные на https: //docs.vespa.ai/en/reference/query-language-reference.html. Другим (например, *) требуется двойное-экранирование.
< п>На данный момент Я использую следующую замену регулярных выражений Python:

Код: Выделить всё

def escape_yql(text: str) -> str:
subtext = re.sub(r'[\\"]', r"\\\g", text)
return re.sub(r'[*]', r"\\\\\g", subtext)
Он используется при построении YQL для поиска по регулярному выражению с точным совпадением, например:

Код: Выделить всё

yql = f'select * from sources * where testfield matches "^{escape_yql(text)}$"'
Однако, что сбивает с толку (по крайней мере для меня), одиночное или двойное экранирование круглых скобок () приводит к сбою с сообщением в форме «Could не создавать запрос из YQL: query:L1:58 нет подходящей альтернативы". Ошибка обычно не возникает, если к этим символам не применяется escape-символ, но не в том случае, если количество открывающих и закрывающих скобок не одинаково: в этом случае становится очевидным, что они на самом деле анализируются, с сообщением вроде этого: /p>

Код: Выделить всё

select * from sources * where name matches \"^TestText))$\" and bcp47_language matches \"^en$\" limit 1

Код: Выделить всё

"yql: [{'code': 4, 'summary': 'Invalid query parameter', 'message': \"Could not create query from YQL: Unmatched closing ')' near index 8\\n^TestText))$\\n        ^\"}]"
Интересно, какой из других специальных символов регулярного выражения может потребовать одинарного или двойного экранирования, чего-то другого или вообще никакого?
По разным причинам Я собираюсь обойти эту проблему, создав дополнительное поле в моей схеме, в котором копия моего токенизированного тестового поля имеет точное свойство, но, тем не менее, кажется важным разобраться в этом. Есть предложения, пожалуйста?

Подробнее здесь: https://stackoverflow.com/questions/793 ... ches-query
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Экранирование специальных символов в запросе Vespa YQL `matches`
    Anonymous » » в форуме Python
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Json Кодирование и экранирование специальных символов в sql с помощью php
    Anonymous » » в форуме Php
    0 Ответы
    70 Просмотры
    Последнее сообщение Anonymous
  • Кодирование Json и экранирование специальных символов в sql с помощью php [закрыто]
    Anonymous » » в форуме Php
    0 Ответы
    56 Просмотры
    Последнее сообщение Anonymous
  • Regex — экранирование специальных символов в Java
    Anonymous » » в форуме JAVA
    0 Ответы
    34 Просмотры
    Последнее сообщение Anonymous
  • Экранирование специальных символов внутри bat-файла не будет действовать одинаково
    Anonymous » » в форуме C#
    0 Ответы
    44 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»