2012-08-15 27 views

回答

3

您在兩個規則之間選擇一個列表:一個用於括號,一個用於方括號。感謝您提出pyparsing。我喜歡。我對你的問題的回答是:

delim_value = Group(delimitedList(string_value | int_value))("list") 
list_value = Or((Suppress("[") + delim_value + Suppress("]"), 
        Suppress("(") + delim_value + Suppress(")"))) 
+0

這時候我嘗試解析用'包圍的列表('的 – Kimvais 2012-08-17 05:19:18

+0

對我的作品給了我一個(看似不相關的)錯誤:'list_value.parseString(「(1, 2,3','slkfj')「)。asList()'給出'[['1','2','3',''slkfj'」]]'也許你的string_value定義有問題或int_value(我不得不在我的模擬中猜測它們)。事實上,如果string_value類似於'Word(printables)',那麼這將導致匹配封閉()的問題;它們會變得混亂進入如此廣泛定義的string_value中,Pyparsing不像regexen那樣進行回溯,但嚴格按照從左到右的順序進行。將'.setDebug()'添加到string_value的定義中並查看與之相匹配的內容。 – PaulMcG 2012-08-29 13:18:45