将字符串解析为子字符串c#

时间:2015-12-17 16:05:08

标签: c# string

我在下面给了这个字符串。这不是我可以改变的东西。我需要创建一个遍历此字符串的for循环,并根据每个'对象创建一个子字符串列表。正则表达式中有什么东西可以让我把它分解成所需的目标吗?我对C#中的解析方法不是很熟悉。建议将不胜感激。感谢

提供STRING

{
    [#HEADER_15618] = {
        {
            name = "Donuts",
            isEnabled = true,
            isWired = false,
        },
        {
            name = "Test",
            isEnabled = true,
            isWired = false,
        },
    },
}

所需的输出

List<string> strings = 
{
    "{
        name = "Donuts",
        isEnabled = true,
        isWired = false,
    }",
    "{
        name = "Test",
        isEnabled = true,
        isWired = false,
    }",
}

请记住,项目数量的变化会改变,但并不总是只有两个。 #HEADER中的数字并不总是相同。

2 个答案:

答案 0 :(得分:2)

也许:

^\s*{\s*\[#.*\]\s*=\s*{\s*{(.*)}\s*,\s*{(.*)}\s*,?\s*}\s*,?\s*}\s*$

Regular expression visualization

Debuggex Demo

然后将2个被捕获的小组放在&#39; {&#39;和&#39;}&#39;在最后

答案 1 :(得分:1)

好的,这是一种黑客解决方案。我确定有更好的方法可以使用正则表达式处理它,因此我建议你在帖子中添加一个正则表达式标签,以获得一些正则表达式专家。

var strings = input.Split(new string[] { "= {", "}," }, StringSplitOptions.RemoveEmptyEntries)
                   .Skip(1)
                   .Select(x => x.Trim())
                   .Where(x => x.StartsWith("{"))
                   .Select(x => x + " }")
                   .ToList();

首先根据两个字符串拆分字符串。第一个去除标题,另一个分割对象。接下来,跳过第一个,因为它是我们不想要的标题。然后查找所有以{开头的条目,以删除我们也不想要的最后几个条目。然后,我们使用另一个Select}追加到string.Split()吃掉的地方。

同样,这绝不是一个有效的解决方案,特别是如果输入字符串包含大量对象,因为它在处理输入的过程中会创建大量字符串。正则表达式可能提供更好的解决方案。