Estoy usando un while(matcher.find())
para recorrer todas las coincidencias de un Patrón. Para cada instancia o coincidencia de ese patrón, encuentra, deseo reemplazar matcher.group(3)
con texto nuevo. Este texto será diferente para cada uno, así que estoy usando matcher.appendReplacement()
para reconstruir la cadena original con los nuevos cambios a medida que avanza. Sin embargo, appendReplacement()
reemplaza todo el Patrón en lugar de solo el grupo.Cómo agregar Reemplazo en un grupo de Matcher en lugar de todo el patrón?
¿Cómo puedo hacer esto pero solo modificar el tercer grupo de la coincidencia en lugar de todo el Patrón?
Aquí es un código de ejemplo:
Pattern pattern = Pattern.compile("THE (REGEX) (EXPRESSION) (WITH MULTIPLE) GROUPS");
Matcher matcher = pattern.matcher("THE TEXT TO SEARCH AND MODIFY");
StringBuffer buffer = new StringBuffer();
while(matcher.find()){
matcher.appendReplacement(buffer, processTheGroup(matcher.group(3));
}
pero me gustaría hacer algo como esto (obviamente esto no funciona).
...
while(matcher.find()){
matcher.group(3).appendReplacement(buffer, processTheGroup(matcher.group(3));
}
Algo así, donde solo reemplaza a un cierto grupo, no a todo el Patrón.
EDITAR: cambió el ejemplo de expresión regular para mostrar que no todo el patrón está agrupado.
Esto es genial gracias. ¿Hay alguna manera de hacerlo si hay algunos aspectos del Patrón que no están en grupos? (Edité el ejemplo de mi publicación original) – cottonBallPaws
Si debe incluir esas partes en la coincidencia (es decir, no puede dejarlas fuera del patrón), entonces desea capturarlas en un grupo para que pueda recordar lo que coincidieron y vuelva a colocarlos sin modificaciones como parte de su reemplazo. – polygenelubricants
Tenga en cuenta que esto fallará si una de las cadenas coincidentes contiene un '$'. Vea la respuesta de Warrens a continuación. – Mene