using System;
using System.Linq.Expressions;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
public class Test
{
public static void Main()
{
string str = "i<A> | n<B> | <C>";
MatchCollection matches = Regex.Matches(str, @"^(?<first>[A-Za-z0-9]*)<(?<second>[^<>]*)>(?:\s+\|\s+(?<first>[A-Za-z0-9]*)<(?<second>[^<>]*)>)+$");
foreach (Match match in matches)
{
match.Groups["first"].Captures
.Select(c => c.Value)
.Zip(match.Groups["second"].Captures.Select(c => c.Value), (x, y) => Tuple.Create(x, y))
.ToList()
.ForEach(t => Console.WriteLine("first: {0}, second: {1}", t.Item1, t.Item2));
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uTGlucS5FeHByZXNzaW9uczsKdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7CnVzaW5nIFN5c3RlbS5MaW5xOwp1c2luZyBTeXN0ZW0uVGV4dC5SZWd1bGFyRXhwcmVzc2lvbnM7CgpwdWJsaWMgY2xhc3MgVGVzdAp7CglwdWJsaWMgc3RhdGljIHZvaWQgTWFpbigpCgl7CiAgICAgICAgc3RyaW5nIHN0ciA9ICJpPEE+IHwgbjxCPiB8IDxDPiI7CiAgICAgICAgTWF0Y2hDb2xsZWN0aW9uIG1hdGNoZXMgPSBSZWdleC5NYXRjaGVzKHN0ciwgQCJeKD88Zmlyc3Q+W0EtWmEtejAtOV0qKTwoPzxzZWNvbmQ+W148Pl0qKT4oPzpccytcfFxzKyg/PGZpcnN0PltBLVphLXowLTldKik8KD88c2Vjb25kPltePD5dKik+KSskIik7ICAgICAgICAgICAgCgogICAgICAgIGZvcmVhY2ggKE1hdGNoIG1hdGNoIGluIG1hdGNoZXMpCiAgICAgICAgewogICAgICAgICAgICBtYXRjaC5Hcm91cHNbImZpcnN0Il0uQ2FwdHVyZXMKICAgICAgICAgICAgLlNlbGVjdChjID0+IGMuVmFsdWUpCiAgICAgICAgICAgIC5aaXAobWF0Y2guR3JvdXBzWyJzZWNvbmQiXS5DYXB0dXJlcy5TZWxlY3QoYyA9PiBjLlZhbHVlKSwgKHgsIHkpID0+IFR1cGxlLkNyZWF0ZSh4LCB5KSkKICAgICAgICAgICAgLlRvTGlzdCgpCiAgICAgICAgICAgIC5Gb3JFYWNoKHQgPT4gQ29uc29sZS5Xcml0ZUxpbmUoImZpcnN0OiB7MH0sIHNlY29uZDogezF9IiwgdC5JdGVtMSwgdC5JdGVtMikpOwogICAgICAgIH0KCX0KfQ==