Supongamos que tengo la siguiente expresión regular:
-(\d+)-
y quiero reemplazar, usando C #, el Grupo 1 (\d+)
con AA
, para obtener:
-AA-
Ahora lo estoy reemplazando usando:
var text = "example-123-example";
var pattern = @"-(\d+)-";
var replaced = Regex.Replace(text, pattern, "-AA-");
Pero realmente no me gusta esto, porque si cambio el patrón para que coincida _(\d+)_
, también tendré que cambiar la cadena de reemplazo _AA_
, y esto va en contra del principio DRY.
Estoy buscando algo como:
Mantenga el texto coincidente exactamente como está, pero cambie el Grupo 1 por this text
y el Grupo 2 por another text
...
Editar:
Eso fue solo un ejemplo. Solo estoy buscando una forma genérica de hacer lo que dije anteriormente.
Debería funcionar para:
anything(\d+)more_text
y cualquier patrón que puedas imaginar.
Todo lo que quiero hacer es reemplazar solo grupos y mantener el resto del partido.
:)
. En mi opinión, esa solución es mucho mejor y más limpia que usar lookahead y lookbehinds..Value
am.Groups[1]
etc.(?:foo)(bar)
,$1
reemplazarábar
. más detallesPuedes hacer esto usando lookahead y lookbehind :
fuente
También tenía necesidad de esto y creé el siguiente método de extensión para ello:
Uso:
Resultado:
fuente
Si no desea cambiar su patrón, puede usar las propiedades Índice de grupo y Longitud de un grupo coincidente.
fuente
Aquí hay otra buena opción de limpieza que no requiere cambiar su patrón.
fuente
revise la codificación a continuación para obtener el reemplazo de grupo separado.
fuente
Aquí hay una versión similar a la de Daniel pero que reemplaza varios partidos:
fuente