No sé cómo explicar el problema en inglés sencillo, así que me ayudo con el ejemplo de la expresión regular. Tengo algo similar a esto (el ejemplo es más o menos simplificada):¿Hay alguna forma de capturar cada grupo si coinciden varias ocurrencias?
((\\d+) - (\\d+)\n)+
Este patrón coincide con estas líneas a la vez:
123 - 23
32 - 321
3 - 0
99 - 55
El patrón contiene 3 grupos: el primero coincide con una línea, el segundo corresponde al primer número en la línea, y el tercero corresponde al segundo número en la línea.
¿Existe la posibilidad de obtener todos esos números? Matcher tiene solo 3 grupos. El primero devuelve 99 - 55
, el segundo - 99
y el tercero - 55
.
SSCCE:
class Test {
private static final Pattern pattern = Pattern.compile("((\\d+) - (\\d+)\n)+");
public static void parseInput(String input) {
Matcher matcher = pattern.matcher(input);
if (matcher.matches()) {
for (int i = 0; i <= matcher.groupCount(); i++) {
System.out.println("------------");
System.out.println("Group " + i + ": " + matcher.group(i));
}
System.out.println();
}
}
public static void main(String[] args) {
parseInput("123 - 23\n32 - 321\n3 - 0\n99 - 55\n");
}
}
¿Es correcto?matches() o matcher.find() que se volverán a hacer cada vez que lo llame? (o ambas) –
Ayer respondí una pregunta sobre "coincidencias", y recuerdo haberla leído, así que estoy bastante seguro de eso. 'encontrar', no sé, por desgracia. –
No puedo hacerlo funcionar. ¿Tiene algún código que haya tenido éxito con esta tarea? – Roman