用方括号包裹单词而不是 sglQuotedString 或 dblQuotedString

Wrap Words in Square Bracket Instead of sglQuotedString or 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"

使用pyparsing的QuotedString class,指定'['作为开始字符,']'作为结束字符:

>>> from pyparsing import OneOrMore,QuotedString
>>> bracketed = QuotedString('[',endQuoteChar=']')
>>> OneOrMore(bracketed).parseString('[sldflsdjkf][asdf][sdf]').asList()
['sldflsdjkf', 'asdf', 'sdf']