C#LINQ:在单行代码中将嵌套集合序列化为带有分隔符的字符串

时间:2014-02-20 14:54:53

标签: c# .net linq collections .net-3.5

我需要编写一个将进行正则表达式匹配的方法,然后在单个字符串的每个匹配中返回所有匹配项和所有组(除了组0,这是完整匹配的字符串),由两个不同的分隔符粘合(一个用于mathes,一个用于组)。 我几乎得到了它:

using System.Text.RegularExpressions;

MatchCollection mc = Regex.Matches(
    "one=123 something two=5678 nothing three=90",
     @"([a-z]+)=(\d+)"
);

Console.WriteLine(string.Join("|", 
    mc.OfType<Match>().SelectMany(m => 
        m.Groups.OfType<Group>().Select(g => 
            g.Value
        ).Skip(1)
    ).ToArray()));

这会产生结果:one|123|two|567|three|90,但我需要的是:one;123|two;567|three;90

问题是,我不知道如何分别粘贴GroupCollection,即在何处以及如何放置另一个string.Join()(可能是添加分隔符的任何其他方法,当然)。< / p>

请记住,我想保留这种语法。如果我想写两个foreach循环,我不会问这个问题:)。

1 个答案:

答案 0 :(得分:0)

好的,明白了:

string.Join("|", 
    mc.OfType<Match>().Select(m => 
        string.Join(";",m.Groups.OfType<Group>().Select(g => 
            g.Value
        ).Skip(1).ToArray())
    ).ToArray()));

现在我知道SelectSelectMany的工作方式不同了:)。

其他方法和解释的任何答案仍然非常受欢迎。