RegEx模式提取数组

时间:2014-07-22 10:29:12

标签: c# regex

我有一个字符串数据(采用txt文件格式),如下所示。我需要将其提取到一个数组中。 我不擅长RegEx。所以需要你的帮助来确定要使用的表达式。

输入:如下:

TABLENAME {
Type: DEPT;
Items: [
    0000=0000
    0001=0001
    0002=0002
    0010=0010
    0012=0012
    0020=0020
    ];
}

预期产量:     一个包含2个元素的数组

1. Type:DEPT
2. Items:  [
    0000=0000
    0001=0001
    0002=0002
    0010=0010
    0012=0012
    0020=0020
    ];

第二个元素也应该转换为数组。需要只提取内容bleow然后我可以使用一个简单的string.Split来提取我需要的数据。

    0000=0000
    0001=0001
    0002=0002
    0010=0010
    0012=0012
    0020=0020

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

我不确定您要完成的是什么以及为什么要从文本文件中获取此内容。

但听起来你真正需要的是识别该对象中的Type和Items。

这可以使用以下正则表达式完成,但如果您有一些空格/换行符不在当前示例中显示,则可能需要修改它:

\{\n?\s*Type\:\s*(?<Type>\w+);\n?\s*Items\:\s*\[\n*(?<Items>(?:\n?[\s]*[0-9=]+)+)[\n\s]*\];\n}

这将为您提供2个命名组,一个名为Type,另一个名为Items 对于上面的示例,Type将包含DEPT,而Items将包含数字对。 但这可以根据你的例子进行调整。我不确定这会如何变化以及它是否适合您的最终目标。

您可以在regex101或类似网站上使用此功能来调整正则表达式以满足您的需求。 我不确定如何解释正则表达式而不分解它并给你一个很长的解释,所以如果你有任何具体的问题,请告诉我。

编辑:为捕获组添加了表名。将在一个名为TableName的组内。这将不允许表名中的空格。如果你需要空格,如果表名总是在新行上,你可以用[^ \ n]替换[^ \ s]。

(?<TableName>[^\s]+)\s\{\n?\s*Type\:\s*(?<Type>\w+);\n?\s*Items\:\s*\[\n*(?<Items>(?:\n?[\s]*[0-9=]+)+)[\n\s]*\];\n}