En el ejemplo simplificado, hay 2 expresiones regulares, una mayúscula y la otra no. La idea sería eficientemente crear una colección IEnumerable (ver "combinados" a continuación) que combina los resultados.Combina eficientemente MatchCollections en .Net Regex
string test = "abcABC";
string regex = "(?<grpa>a)|(?<grpb>b)|(?<grpc>c)]";
Regex regNoCase = new Regex(regex, RegexOptions.IgnoreCase);
Regex regCase = new Regex(regex);
MatchCollection matchNoCase = regNoCase.Matches(test);
MatchCollection matchCase = regCase.Matches(test);
//Combine matchNoCase and matchCase into an IEnumerable
IEnumerable<Match> combined= null;
foreach (Match match in combined)
{
//Use the Index and (successful) Groups properties
//of the match in another operation
}
En la práctica, los MatchCollections puede contener miles de resultados y se pasan con frecuencia el uso de expresiones regulares larga creados de forma dinámica, por lo que me gustaría a alejarse de la copia de los resultados a las matrices, etc. Todavía estoy aprendiendo y LINQ Estoy confundido sobre cómo combinar esto o lo que el rendimiento alcanza a un proceso que ya es lento.
Creo que .Concat() podría ser mejor que .Union() aquí, a menos que intencionalmente quiera evitar la superposición en los resultados. – jmnben