我需要编写一个将进行正则表达式匹配的方法,然后在单个字符串的每个匹配中返回所有匹配项和所有组(除了组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循环,我不会问这个问题:)。
答案 0 :(得分:0)
好的,明白了:
string.Join("|",
mc.OfType<Match>().Select(m =>
string.Join(";",m.Groups.OfType<Group>().Select(g =>
g.Value
).Skip(1).ToArray())
).ToArray()));
现在我知道Select
和SelectMany
的工作方式不同了:)。
其他方法和解释的任何答案仍然非常受欢迎。