Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检索分层字符串的C#正则表达式_C#_Regex - Fatal编程技术网

检索分层字符串的C#正则表达式

检索分层字符串的C#正则表达式,c#,regex,C#,Regex,如何使用C#中的正则表达式解析下面的字符串,并返回match和match groups集合中的内容?开始标记为[[和]]。有人能帮忙吗 [[Parent1 [[Child 1]],[[Child 2]],[[Child 3]]]] [[Parent2 [[Child 1]],[[Child 2]]]] 如下所示寻找输出 item: Parent1 Children: [Child1, Child2, Child3] item: Parent2 Children: [Child1, Child2

如何使用C#中的正则表达式解析下面的字符串,并返回match和match groups集合中的内容?开始标记为[[和]]。有人能帮忙吗

[[Parent1 [[Child 1]],[[Child 2]],[[Child 3]]]] [[Parent2 [[Child 1]],[[Child 2]]]]
如下所示寻找输出

item: Parent1
Children: [Child1, Child2, Child3]
item: Parent2
Children: [Child1, Child2]
(\[\[Parent\d\]\])(\[\[Child\d\]\])+\]\])+


实际上未测试

您可以尝试下面的正则表达式

(?<=^|]\s)\[\[(\S+)|(\[\[(?!Parent).*?\]\])(?=]]\s|]]$)
(?
“家长”组中的所有家长成员和“孩子”组中的所有孩子成员

  using System;
  using System.Text.RegularExpressions;
  public class Test
    {
    public static void Main()
    {
     String input = @"[[Parent1 [[Child 1]],[[Child 2]],[[Child 3]]]] [[Parent2 [[Child 1]],[[Child 2]]]]";
     Regex rgx = new Regex(@"(?<parent>Parent\d )|(?!^)\G(?:\[\[(?<child>.*?)]]),?");
     foreach (Match m in rgx.Matches(input))
    {
    Console.WriteLine(m.Groups["parent"].Value);
    Console.WriteLine(m.Groups["child"].Value);
    }
    }
    }
使用系统;
使用System.Text.RegularExpressions;
公开课考试
{
公共静态void Main()
{
字符串输入=@“[[Parent1[[Child 1]],[[Child 2]],[[Child 3]]]][[Parent2[[Child 1]],[[Child 2]]]”;
Regex rgx=new Regex(@“(?Parent\d)|(?!^)\G(?:\[\[(?*?)]),?”;
foreach(在rgx中匹配m.Matches(输入))
{
Console.WriteLine(m.Groups[“父”].值);
Console.WriteLine(m.Groups[“child”].Value);
}
}
}

如何将其转换为更易于理解的内容-JSON:

string ConvertToJson(string input)
{
    var elements = input
        // replace all square brackets with quotes
        .Replace("[[", "\"").Replace("]]", "\"") 
        // fix double quotes
        .Replace("\"\"", "\"")
        // split on all space-quote combos
        .Split(new[] { " \"" }, StringSplitOptions.RemoveEmptyEntries)
        // make sure all elements start and end with a quote
        .Select(x => "\"" + x.Trim('"') + "\"")
        // make all odd elements the parent item and all even the children collection
        .Select((x, i) => (i % 2 == 0) 
            ? ("{\"item\":" + x) 
            : ",\"children\":[" + x + "]},");

    // turn back into string, remove unneeded comma at end and wrap in an array
    return "[" + String.Concat(elements).Trim(',') + "]";
}
输入:

[[Parent1 [[Child 1]],[[Child 2]],[[Child 3]]]] [[Parent2 [[Child 1]],[[Child 2]]]]
输出:

[{"item":"Parent1","children":["Child 1","Child 2","Child 3"]},{"item":"Parent2","children":["Child 1","Child 2"]}]
然后,您可以使用JSON.NET或任何您愿意使用的工具来使用它

您还将注意到,与其他解决方案一样,此解决方案不要求将父对象称为
Parent


为了完整起见,下面是一个使用JSON.NET对其进行反序列化的示例:

var list = JsonConvert.DeserializeObject<dynamic>(jsonString);

foreach (var item in list)
{
    Console.WriteLine("item: {0}", item.item);
    Console.WriteLine("Children: [{0}]", String.Join(", ", item.children));
}
var list=JsonConvert.DeserializeObject(jsonString);
foreach(列表中的变量项)
{
WriteLine(“item:{0}”,item.item);
WriteLine(“Children:[{0}]”,String.Join(“,”,item.Children));
}
哪个输出

项目:家长1
儿童:[儿童1、儿童2、儿童3]
项目:家长2
儿童:[儿童1,儿童2]


你可以得到像这样的
[[Child 1]]、[[Child 2]]、[[Child 3]]
不像
[Child1,Child2,Child3]
是的。那很好。但是怎么做呢?谢谢。你必须避开括号中的“\code>父母真的会被称为
父母吗?
[{"item":"Parent1","children":["Child 1","Child 2","Child 3"]},{"item":"Parent2","children":["Child 1","Child 2"]}]
var list = JsonConvert.DeserializeObject<dynamic>(jsonString);

foreach (var item in list)
{
    Console.WriteLine("item: {0}", item.item);
    Console.WriteLine("Children: [{0}]", String.Join(", ", item.children));
}