我想使用PyParsing来解析基于BNF的规则。规则可能如下:
A -> 'You can use \xABCD to display hexadecimal numbers'
其中A是非终结符号。赋值操作数是' - >'。最后一项是带引号的字符串。
我以下列方式使用PyParsing:
Left= Word(alphanums)
Op = oneOf('= := -> ::=')
Right = QuotedString('"') | QuotedString("'")
Rule = Left+ Op+ Right
Rule.parseString("A -> '_\x5555 a'") # Get an error of ValueError: invalid \x escape
那么请你告诉我如何使用QuotedString重新调整\ x转义?任何帮助将不胜感激。
答案 0 :(得分:3)
如果要在输入字符串中嵌入'\',请确保在前导引号前加上'r',以便Python解释器保留所有'\',而不是将它们解释为转义符。< / p>
从Python控制台(Python 3.3):
>>> Left= Word(alphanums)
>>> Op = oneOf('= := -> ::=')
>>> Right = QuotedString('"') | QuotedString("'")
>>> Rule = Left+ Op+ Right
>>> Rule.parseString("A -> '_\x5555 a'")
(['A', '->', '_U55 a'], {})
>>> Rule.parseString(r"A -> '_\x5555 a'") # use a raw string literal, with r""
(['A', '->', '_\\x5555 a'], {})
答案 1 :(得分:1)
只需使用\\
即可转义\
:
"A -> '_\\x5555 a'"