我尝试使用看起来(或多或少)看起来像这样的pyparsing来解析一些数据:
User.Name = Dave
User.Age = 42
Date = 2015/01/01
Begin Component List
Begin Component 2
1 some data = a value
2 another key = 999
End Component 2
Begin Another Component
a.key = 42
End Another Component
End Component List
Begin MoreData
Another = KeyPair
End MoreData
我发现了一些类似的例子,但我自己表现不佳。
parsing file with curley brakets Parse line data until keyword with pyparsing
这是我到目前为止所做的事情,但我仍然遇到类似于以下错误的错误:pyparsing.ParseException: Expected "End" (at char 26), (line:5, col:1)
from pyparsing import *
data = '''Begin A
hello
world
End A
'''
opener = Literal('Begin') + Word(alphas)
closer = Literal('End') + Word(alphas)
content = Combine(OneOrMore(~opener
+ ~closer
+ CharsNotIn('\n', exact=1)))
expr = nestedExpr(opener=opener, closer=closer, content=content)
parser = expr
res = parser.parseString(data)
print(res)
"开始"之后的词语很重要。被捕获,因为这些是字典的名称,以及键值对。在开场白之后有一个数字,例如"开始组件2" " 2"是我不需要的对数(可能是原始软件使用的?)。同样,我也不需要列表中的数字(" 1"和" 2")。
nestedExpr
对此有正确的解决方法吗?