我有一个字体的字形信息,如下所示:
(CHARACTER C T
(CHARWD R 0.6944475)
(CHARHT R 0.686111)
(COMMENT
(KRN C y R -0.027779)
(KRN C e R -0.083334)
(KRN C o R -0.083334)
(KRN C r R -0.083334)
(KRN C a R -0.083334)
(KRN C A R -0.083334)
(KRN C u R -0.083334)
)
)
有没有直接的方法在python中解析这个?我之前使用过BeautifulSoup,但它需要嵌套的<tag> </tag>
类信息。将它转换为XML并重新转换并不难 - 但似乎它将重新发明轮子。我如何将这些信息输入到我可以操作并再次吐出的数据对象中?
答案 0 :(得分:6)
您可以使用pyparsing。您的示例看起来非常像s-expression,他们在examples section中有一个s表达式解析器:http://pyparsing.wikispaces.com/file/view/sexpParser.py
答案 1 :(得分:2)
这会将您的数据转换为python数据结构。不确定这是不是你想要的?
s = """(CHARACTER C T
(CHARWD R 0.6944475)
(CHARHT R 0.686111)
(COMMENT
(KRN C y R -0.027779)
(KRN C e R -0.083334)
(KRN C o R -0.083334)
(KRN C r R -0.083334)
(KRN C a R -0.083334)
(KRN C A R -0.083334)
(KRN C u R -0.083334)
)
)"""
s = re.sub("\)", "\),", s)
t = re.sub('([(,\s])(\w+)', '\\1"\\2",', s)
eval(t[:-1].replace('\\', ''))