繁体   English   中英

带有反斜杠的带反斜杠的带引号的字符串

[英]Quoted string with a backslash with pyparsing

以下代码

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”hexa值被解释为'\\ n',即使使用leaveWhitespace调用也不会将其视为普通字符。

我也尝试使用SkipTo,但我没有设法处理转义的内部括号,如:

"( I am \( John \))"

用解析器

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

知道如何修复/解决这个问题吗?

尝试用r字符串添加前缀。 那就是你有一个字符串

"(\x01\x0a)"

改为

r"(\x01\x0a)"

发生的事情就是直接解释斜线并且不会达到pyparsing 你有text.parseString("(\\x01\\x0a)") ,它与text.parseString("(\\x01\\n)") 完全相同

这是我终于找到的解决方案:

escaped_paren = Literal("\(") | Literal("\)")
text = "(" + SkipTo(")", ignore=escaped_paren)

试试这个解决方案,它解决了kirelagin发现的反斜杠问题:

text = QuotedString(quoteChar="(", endQuoteChar=")", escChar="\\", unquoteResults=False)

print text.parseString(r"(\x01\x0a)")
assert(text.parseString(r"(\x01\x0a)")[0] == r"(\x01\x0a)")

打印:

['(\\x01\\x0a)']

由于您假定将包含引号字符,因此请添加参数unquoteResults=False 如果你打算去除()的话,不妨让pyparsing为你做,并将这个参数传递给True(或者只是把它留下来,因为True是默认值)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM