Estoy de acuerdo - que es un poco extraño, sin embargo, piensa que hay buenas razones para eso.
A Regex Match
es en sí mismo un Group
, que a su vez es un Capture
.
Pero Match.Value
(o Capture.Value
como lo es en realidad) solo es válido cuando hay una coincidencia presente en la cadena: si coincide varias instancias de un patrón, por definición no puede devolver todo. En efecto, la propiedad Value
en el partido es una conveniencia para cuando solo hay partido.
Pero para aclarar donde este comportamiento de pasar todo el partido en Groups[0]
tiene sentido - Considere este ejemplo (artificial) de un unminifier código ingenua:
[TestMethod]
public void UnMinifyExample()
{
string toUnMinify = "{int somevalue = 0; /*init the value*/} /* end */";
string result = Regex.Replace(toUnMinify, @"(;|})\s*(/\*[^*]*?\*/)?\s*", "$0\n");
Assert.AreEqual("{int somevalue = 0; /*init the value*/\n} /* end */\n", result);
}
El partido expresión regular preservará/* */comentarios el final de una declaración, colocando una nueva línea después, pero funciona para cualquiera; o} terminaciones de línea.
bien - puede que se pregunte por qué te molesta hacer esto con una expresión regular - pero el humor me :)
Si Groups[0]
generada por los partidos de esta expresión regular no era toda la captura - a continuación, un solo guardia reemplazar no sería posible - y su pregunta probablemente sería preguntar por qué no se el partido completo se pone en Groups[0]
en lugar de al revés!
Mi primera respuesta [ahora eliminada] perdió un poco el sentido de su pregunta, por favor vea mi reemplazo, que da un ejemplo de dónde se muestra que este comportamiento tiene sentido (espero :)) –