所以,根据分隔符分割字符串很容易,只需使用'string.split'。现在让我们说我想分开一个开放的花括号和一个封闭的花括号。也可以直接使用:在嵌套分隔符之间标记字符串
var foo = "{foo}{bar}";
var splitme = foo.Split(new char[] { '{', '}'});
现在让我们通过在初始打开/关闭{}内添加嵌套{},使其更加复杂,最多达n层深。我所追求的是试图解析一个看起来是游戏MOD的专有文本文件格式(stellaris,伟大的游戏),并且我正在寻找解析这个东西的好方法。我将如何去保留括号内(标记化?)文本的每一部分?加入混合是保留一个关键值对的业务类型使用=作为关系的指标。
这里是我想以这种方式来解析的东西例子:
#Neutronium Materials
tech_ship_armor_5 = {
area = engineering
cost = @tier3cost4
tier = 3
category = { materials }
ai_update_type = military
prerequisites = { "tech_ship_armor_4" "tech_mine_neutronium" }
weight = @tier3weight4
weight_modifier = {
factor = 1.25
modifier = {
factor = 1.25
research_leader = {
area = engineering
has_trait = "leader_trait_expertise_materials"
}
}
}
ai_weight = {
modifier = {
factor = 1.25
research_leader = {
area = engineering
has_trait = "leader_trait_expertise_materials"
}
}
}
}
我的第一种方法是逐行读取这个坏小子符合一个StreamReader,并保持跟踪多少{我碰到之前,他们开始关闭相应的}。在{}的每个块中,我搜索下=,然后找出我刚刚找到的键值对,以及它在层次结构中的存在位置。这...看起来并不理想。有一些正则表达式的魔法或现成的文本解析库有更好的方法吗?
使用类似ANTLR的词法分析器 – dman2306