我在下面给了这个字符串。这不是我可以改变的东西。我需要创建一个遍历此字符串的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中的数字并不总是相同。
答案 0 :(得分:2)
也许:
^\s*{\s*\[#.*\]\s*=\s*{\s*{(.*)}\s*,\s*{(.*)}\s*,?\s*}\s*,?\s*}\s*$
然后将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()
吃掉的地方。
同样,这绝不是一个有效的解决方案,特别是如果输入字符串包含大量对象,因为它在处理输入的过程中会创建大量字符串。正则表达式可能提供更好的解决方案。