在方括号中包装单词而不是sglQuotedString或dblQuotedString

时间:2015-05-23 18:19:34

标签: javascript python escaping pyparsing

我使用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"

1 个答案:

答案 0 :(得分:1)

使用pyparsing的QuotedString类,指定'['作为开头字符,并将']'指定为结束字符:

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