Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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
.net NET附加的命名组_.net_Regex_Capturing Group - Fatal编程技术网

.net NET附加的命名组

.net NET附加的命名组,.net,regex,capturing-group,.net,Regex,Capturing Group,我想加入命名组 原文: 1/2/3/4/5|id1:value1|id2:value2|id3:value3|1/4/2/7/7|id11:value11|id12:value12| Group1: 1/2/3/4/5|id1:value1|id2:value2|id3:value3| Sub groups: id1:value1| id2:value2| id3:value3| Group2: 1/4/2/7/7|id11:value11|id12:value12| Sub groups:

我想加入命名组

原文:

1/2/3/4/5|id1:value1|id2:value2|id3:value3|1/4/2/7/7|id11:value11|id12:value12|

Group1:
1/2/3/4/5|id1:value1|id2:value2|id3:value3|
Sub groups:
id1:value1|
id2:value2|
id3:value3|

Group2:
1/4/2/7/7|id11:value11|id12:value12|
Sub groups:
id11:value11|
id12:value12|

如何做到这一点?

虽然这项任务很简单,但不会因为拆分而变得复杂,.Net正则表达式匹配使用集合保存每个组的所有捕获记录,这与我所知道的任何其他风格不同

匹配:

string pattern = @"(?<Header>\d(?:/\d)*\|)(?<Pair>\w+:\w+\|)+";
MatchCollection matches = Regex.Matches(str, pattern);

工作示例:

@Mike:.NET=>C或VB.NET。为什么不在|上拆分字符串,并将结果分成4组?我添加了一个答案,简单地回答了这个问题,但我怀疑有一个更简单的解决方案,如果你能添加一些关于你正在做的事情的细节。另一点:你所说的群体和子群体是什么意思?你想要一个单一的匹配对象,和你所描述的组吗?我使用C。但这在原则上并不重要,如果这可以在一个模式中完成的话。谢谢,这很好。如何使用下一个模式:?\d?:/\d*\\\\?\w+:?\w+\\\\\+?比较C代码中的Id和值。
foreach (Match match in matches)
{
    Console.WriteLine(match.Value); // whole match ("Group1/2" in the question)
    Console.WriteLine(match.Groups["Header"].Value);
    foreach (Capture pair in match.Groups["Pair"].Captures)
    {
        Console.WriteLine(pair.Value); // "Sub groups" in the question
    }
}