簡體   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