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

では、\x エスケープを QuotedString で regconize する方法を教えてください。どんな助けでも大歓迎です。

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 に答える