using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
public class Test
{
public static void Main()
{
var input = "aaa 12 bbb 123,456,789 ccc 34";
foreach (var value in GetValues(input))
Console.WriteLine(value);
}
public static IEnumerable<string> GetValues(string input)
{
// Suppose regex could be any regex
var regex = new Regex(@"(?:(?<concat>\d+),?)+");
foreach (Match match in regex.Matches(input))
{
// Does this regex have our special feature?
if (regex.GroupNumberFromName("concat") >= 0)
{
// Concat the captured values
var captures = match.Groups["concat"].Captures.Cast<Capture>().Select(c => c.Value).ToArray();
yield return String.Concat(captures);
}
else
{
// This is a normal regex
yield return match.Value;
}
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CnVzaW5nIFN5c3RlbS5UZXh0LlJlZ3VsYXJFeHByZXNzaW9uczsKCgpwdWJsaWMgY2xhc3MgVGVzdAp7CglwdWJsaWMgc3RhdGljIHZvaWQgTWFpbigpCgl7CgkJdmFyIGlucHV0ID0gImFhYSAxMiBiYmIgMTIzLDQ1Niw3ODkgY2NjIDM0IjsKCQlmb3JlYWNoICh2YXIgdmFsdWUgaW4gR2V0VmFsdWVzKGlucHV0KSkKCQkgICAgQ29uc29sZS5Xcml0ZUxpbmUodmFsdWUpOwoJfQoJCglwdWJsaWMgc3RhdGljIElFbnVtZXJhYmxlPHN0cmluZz4gR2V0VmFsdWVzKHN0cmluZyBpbnB1dCkKCXsKICAgICAgICAvLyBTdXBwb3NlIHJlZ2V4IGNvdWxkIGJlIGFueSByZWdleAoJCXZhciByZWdleCA9IG5ldyBSZWdleChAIig/Oig/PGNvbmNhdD5cZCspLD8pKyIpOwoKCQlmb3JlYWNoIChNYXRjaCBtYXRjaCBpbiByZWdleC5NYXRjaGVzKGlucHV0KSkKCQl7CiAgICAgICAgICAgIC8vIERvZXMgdGhpcyByZWdleCBoYXZlIG91ciBzcGVjaWFsIGZlYXR1cmU/CgkJCWlmIChyZWdleC5Hcm91cE51bWJlckZyb21OYW1lKCJjb25jYXQiKSA+PSAwKQoJCQl7CiAgICAgICAgICAgICAgICAvLyBDb25jYXQgdGhlIGNhcHR1cmVkIHZhbHVlcwoJCQkgICAgdmFyIGNhcHR1cmVzID0gbWF0Y2guR3JvdXBzWyJjb25jYXQiXS5DYXB0dXJlcy5DYXN0PENhcHR1cmU+KCkuU2VsZWN0KGMgPT4gYy5WYWx1ZSkuVG9BcnJheSgpOwoJCQkgICAgeWllbGQgcmV0dXJuIFN0cmluZy5Db25jYXQoY2FwdHVyZXMpOwoJCQl9CgkJCWVsc2UKCQkJewogICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIG5vcm1hbCByZWdleAoJCQkJeWllbGQgcmV0dXJuIG1hdGNoLlZhbHVlOwkKCQkJfQoJCX0KCX0KfQ==