以下代码
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/