Заключайте слова в квадратные скобки вместо sglQuotedString или dblQuotedString

Я использую pyparsing для анализа логического строкового запроса. Итак, я отправлю строку, которая выглядит примерно так:

string = "'foo' AND 'bar' OR NOT 'foobar'"

Я использую sqlQuotedString(), но будут случаи, когда анализируемая строка будет содержать другие типы пунктуации, такие как апострофы, поэтому это может быть так:

string = "'foo' AND 'ba'r' OR NOT 'fo0-bar'"

Я попытался настроить QuotedString("'", escChar = '\\'), но я отправляю строку из javascript и не могу найти способ включить обратную косую черту в свою строку. Я пробовал это:

for(var i = 0; i < v.length; i++) {
    if(v[i] === '"') {
        v[i] = [v.slice(0, i), "\\", v.slice(v)].join('');
    }
}

и я попытался добавить дополнительную обратную косую черту ("\\\\\\\"), но строка по-прежнему отображается без "\" в ней.

Есть ли способ просто настроить pyparsing так, чтобы он ожидал слово, заключенное в квадратные скобки, а не в одинарные или двойные кавычки, то есть [word] против 'word' или "word"?


person sp_conway    schedule 23.05.2015    source источник


Ответы (1)


Используйте класс QuotedString pyparsing, указав '[' в качестве открывающего символа и ']' в качестве конечного символа:

>>> from pyparsing import OneOrMore,QuotedString
>>> bracketed = QuotedString('[',endQuoteChar=']')
>>> OneOrMore(bracketed).parseString('[sldflsdjkf][asdf][sdf]').asList()
['sldflsdjkf', 'asdf', 'sdf']
person PaulMcG    schedule 25.05.2015
comment
Большое тебе спасибо. Это сработало. Я попробовал QuotedString, но не смог правильно ввести endQuoteChar sigh. - person sp_conway; 26.05.2015