解析带有特殊标记的文本文件
我需要用Python来解析一个DSL
文件。DSL
文件是一种文本文件,里面有一些特殊的标记和标签,这些标签是由ABBYY Lingvo使用的。
它的样子像这样:
activate
[m0][b]ac·ti·vate[/b] {{id=000000367}} [c rosybrown]\[[/c][c darkslategray][b]activate[/b][/c] [c darkslategray][b]activates[/b][/c] [c darkslategray][b]activated[/b][/c] [c darkslategray][b]activating[/b][/c][c rosybrown]\][/c] [p]BrE[/p] [c darkgray] [/c][c darkcyan]\[ˈæktɪveɪt\][/c] [s]z_activate__gb_1.wav[/s] [p]NAmE[/p] [c darkgray] [/c][c darkcyan]\[ˈæktɪveɪt\][/c] [s]z_activate__us_1.wav[/s] [c orange] verb[/c] [c darkgray] [/c][b]{{cf}}\~ sth{{/cf}} [/b]
[m1]{{d}}to make sth such as a device or chemical process start working{{/d}}
[m2][ex][*]• [/*][/ex][ex][*]{{x}}The burglar alarm is activated by movement.{{/x}} [/*][/ex]
[m2][ex][*]• [/*][/ex][c darkgray] [/c][ex][*]{{x}}The gene is activated by a specific protein.{{/x}} [/*][/ex]
{{Derived Word}}[m3][c darkslategray][u]Derived Word:[/u][/c] ↑<<activation>>{{/Derived Word}}
{{side_verb_forms}}[m3][c darkslategray][u]Verb forms:[/u][/c] [s]x_verb_forms_activate.jpg[/s]{{/side_verb_forms}}
现在我觉得唯一的办法是用regexps
(正则表达式)来解析这个文件。但我有点怀疑能不能做到,因为这些标签有一定的层次结构,有些标签是嵌套在其他标签里面的。
我不能使用专门的xml
和html
解析器。虽然它们在创建文档的树形结构方面非常好,但它们是为html
和xml
的特定标签设计的。
那么,解析这种格式的文件最好的方法是什么呢?有没有适合这个目的的Python库?
2 个回答
1
“某个引擎可以根据嵌套标签的结构来创建一个树形结构。”
可以看看这个链接:http://www.dabeaz.com/ply/
你可以很快且简单地定义语法,方法是用一组词法规则和一些语法生成规则。
如果你不喜欢这个,还有其他选择,看看这个列表。