Python 使用特殊标记解析文本文件

Python 使用特殊标记解析文本文件,python,parsing,tags,markup,Python,Parsing,Tags,Markup,我需要使用Python解析一个DSL文件。DSL文件是一个文本文件,其中的文本具有特殊标记,标记由用户使用 它看起来像: 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 da

我需要使用Python解析一个
DSL
文件。DSL文件是一个文本文件,其中的文本具有特殊标记,标记由用户使用

它看起来像:

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}}
激活
[m0][b]ac·ti·vate[/b]{id=000000367}[c rosybrown][c][c黑灰色][b]激活[b][c][c黑灰色][b]激活[b][c][c黑灰色][b]激活[b][c][c黑灰色][b]激活[c][c rosybrown c][b][c黑灰色][c黑灰色][c][c黑灰色][c][c黑灰色][c][c黑灰色][c]激活[c黑灰色][c黑灰色]\[c黑灰色][c][c darkcyan][c]ktɪveɪt][c][s]zɪu激活我们1.wav[/s][c橙色]动词[c][c darkgray][c][b][cf}}
使装置或化学过程等某物开始工作
[m2][ex][*]•[/*][/ex][ex][*]{{x}}防盗警报器通过移动来启动。{{x}}[/*][/ex]
[m2][ex][*]•[/*][/ex][c darkgray][c][ex][*]{{x}}该基因被一种特定的蛋白质激活。{{/x}[/*][/ex]
{{派生词}[m3][c暗灰色][u]派生词:[/u][/c]↑{{/派生词}}
{{side_verb_forms}[m3][c darkslategray][u]动词形式:[/u][c][s]x_verb_forms_activate.jpg[/s]{{/side_verb_forms}
现在我看到了使用
regexps
解析此文件的唯一选项。但我怀疑它是否能够实现,因为这种格式的标记具有某种层次结构,其中一些标记位于其他标记的内部

我不能使用特殊的
xml
html
解析器。它们在创建文档的树结构方面非常完美,但它们是为
html
xml
的特殊标记而设计的


以这种格式解析文件的最佳方法是什么?是否有任何Python库可用于此目的?

将RegExp用于此目的而不是简单的用途会让人心痛

如果坚持使用正则表达式(不推荐),请查看XML上使用的方法

如果“.dsl”指的是ABBRY或Lingvo dict格式,您可能想看看它是否可以读取ABBRY dsl格式

“允许基于嵌套标记结构创建树的引擎”

您可以快速轻松地将语法定义为一组词汇规则和一些语法产品

如果你不喜欢这个,这里有一个替代列表


“DSL”是一个通用术语。这是哪种特定的DSL?什么是域名?是否有适用的标准?当你在谷歌上搜索“Parse D Python”(其中D是DSL适用的标准定义)时,你得到了什么?这是一个在俄罗斯非常流行的程序的字典文件格式。这是他们自己的格式,并且文件已经
.dsl
消失。所有的信息都是俄语的,所以我认为在这里发布描述链接不是一个好主意。我认为可能有一些通用的模块来解析带有标记的文本文件。所以我决定在这里问,“带标签的文本文件”?那太模糊了,没有任何意义。JSON、LaTex、RTF都是“带标记的文本文件”。没有“通用解析器”。您只需要使用DSL适用标准的名称来搜索解析器。如果谷歌找不到,那么它就不存在了。没有神奇的“带标签的文本”,因为这是一个太开放、太模糊、太模糊的描述。@S.Lott谢谢。我在谷歌上找不到任何东西。这是他们当地的标准。我认为他们可能是一个引擎,它允许根据嵌套标记结构创建树(通过提供文本和标记列表(在本例中,大多数标记位于方括号中))。是的,它是Lingvo格式。我需要为自己从DSL文件中提取一些数据,并且我想最有效地完成这项工作。先看那里。第二种选择是定义YACC/LEX语法。避免使用正则表达式,除非你只是想把整个部分分开。谢谢你的回答。我选择了@S.Lott的答案,因为我认为它对于那些需要解析标记的其他标记文本格式的人来说非常有用。你的回答太有帮助了!我需要从大约3000个单词卡片(带有关键词的卡片)中提取一些信息,将其添加到我用来学习英语单词的程序中。我想用复制粘贴的方法。但后来我决定,使用Python不做机械工作,而是更好地学习Python,这是一个好主意。谢谢!至少我现在知道这太复杂了。我想我会坚持使用RegExps,只保留一些我需要的部分。但当其他人需要解析带有标记的标记文本文件时,他们可能会寻找您的anser。通常这只会使一个问题变成两个问题。在尝试正则表达式之前,您需要了解这类内容的PLY。