2

我想使用 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 regconize \x 转义吗?任何帮助,将不胜感激。

4

2 回答 2

3

如果要在输入字符串中嵌入 '\',请确保在前导引号前加上 'r',以便 Python 解释器保留所有 '\',而不是将它们解释为转义。

从 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'], {})
于 2013-03-10T13:09:22.070 回答
1

只需使用\\转义\

"A -> '_\\x5555 a'"
于 2013-03-10T05:09:41.850 回答