来自文本的关联数组

时间:2014-10-05 16:19:14

标签: c# regex

如何解析形成这样的文本?

Data
    Name of a group:
        Name:    Value
        Name:          Value
        Name:   Value
Data
    Name of a group:
        Name:   Value
    Name of a group:
        Name:  Value
        Name:     Value

它可以有多个Data,每个数据可以包含多个Named groups,并且每个数据中可以有多个Name Value对,也可以在整个文本中改变空格数,这意味着在第一个Data之前,可以有两个空格,而在第二个空格之前。

解析之后,我希望能够获得关联数组,这样我就能以这种方式访问​​数据data[0][Name of group][Value name]或者做foreachs等等。这是否有可能具有正则表达的力量?

1 个答案:

答案 0 :(得分:1)

我认为你可以不用正则表达式。只需逐行扫描输入。如果line包含字符串"Data",则递增data_index(最初设置为-1)。如果该行看起来像"text:",则将变量group_name设置为text。如果该行看起来像"text_left:text_right",则将变量name设置为text_left并执行操作data[data_index][group_name][name] = text_right

要检查字符串是否为组名,请首先修剪它,然后检查最后一个字符是否为':'。如果它不是数据行而不是组名,则可以推断它是名称/值对。

这假设输入文件格式正确:组名始终以':'结尾,依此类推。行中的空格并不重要。