Regex .NET прикрепил именованную группу
Я хочу присоединиться к названной группе.
Исходный текст:
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|
Как я могу это сделать?
1 ответ
Решение
Несмотря на то, что эта задача достаточно проста без сложностей с разделением, совпадения с регулярными выражениями.Net содержат записи всех захватов каждой группы (в отличие от любого другого варианта, который я знаю), используя коллекцию Group.Captures.
Матч:
string pattern = @"(?<Header>\d(?:/\d)*\|)(?<Pair>\w+:\w+\|)+";
MatchCollection matches = Regex.Matches(str, pattern);
Использование:
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
}
}
Рабочий пример: http://ideone.com/5kbIQ