以下代码

text = QuotedString(quoteChar="(", endQuoteChar=")", escChar="\\")
text.leaveWhitespace()

def test_hex_with_backslashN_code(self):
    self.assertEqual(text.parseString("(\x01\x0a)")[0], "(\x01\x0a)")


触发异常:

ParseException: Expected quoted string, starting with ( ending with ) (at char 0), (line:1, col:1)


由于存在“十六进制值” \ x0a,该值被解释为“ \ n”,即使使用LeaveWhitespace调用也不会将其视为普通字符。

我也尝试过SkipTo,但无法处理转义的内括号,例如:

"( I am \( John \))"


用解析器

text = "(" + SkipTo(")")


任何想法如何解决/解决?

最佳答案

尝试为字符串加上r前缀。那就是如果你有一个字符串

"(\x01\x0a)"


更改为

r"(\x01\x0a)"


发生的是,斜杠会立即得到解释,而不会达到pyparsing。您有text.parseString("(\x01\x0a)"),它与text.parseString("(\x01\n)")完全相同。

关于python - 用pyparsing引号加上反斜杠的字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16911927/

10-13 03:50