La función matcher.group()
espera tomar un solo argumento entero: El índice del grupo de captura, comenzando desde 1. El índice 0 es especial, lo que significa "la coincidencia completa". Un grupo de captura se crea utilizando un par de paréntesis "(...)
". Cualquier cosa dentro del paréntesis es capturas. Los grupos están numerados de izquierda a derecha (nuevamente, comenzando desde 1), al abrir paréntesis (lo que significa que los grupos pueden superponerse). Como no hay paréntesis en su expresión regular, no puede haber grupo 1.
El javadoc en la clase Pattern cubre la sintaxis de la expresión regular.
Si está buscando un patrón que pueda repetirse varias veces, puede usar Matcher.
find() repetidamente hasta que devuelva falso. Matcher.group(0)
una vez en cada iteración devolverá lo que coincide con ese momento.
Si desea construir una gran expresión regular que coincida con todo de una vez (que creo que es lo que desea), alrededor de cada uno de los tres conjuntos de cosas que desea capturar, coloque un conjunto de paréntesis de captura, use Matcher.match()
y luego Matcher.group(n)
donde n es 1, 2 y 3 respectivamente. Por supuesto, Matcher.match()
también puede devolver falso, en cuyo caso el patrón no coincide y no puede recuperar ninguno de los grupos.
En su ejemplo, lo que probablemente desee hacer es hacer que coincida con el texto anterior, luego iniciar un grupo de captura, hacer coincidir los dígitos, finalizar el grupo de captura, etc. No sé lo suficiente acerca de su exacta formato de entrada, pero aquí hay un ejemplo.
digamos que tuve cadenas de la forma:
Eat 12 carrots at 12:30
Take 3 pills at 01:15
Y quería extraer la cantidad y tiempos.Mi expresión regular sería algo como:
"\w+ (\d+) [\w ]+ (\d{1,2}:\d{2})"
El código sería algo como:
Pattern p = Pattern.compile("\\w+ (\\d+) [\\w ]+ (\\d{2}:\\d{2})");
Matcher m = p.matcher(oneline);
if(m.matches()) {
System.out.println("The quantity is " + m.group(1));
System.out.println("The time is " + m.group(2));
}
La expresión regular significa "una cadena que contiene una palabra, un espacio, una o más dígitos (que son capturado en el grupo 1), un espacio, un conjunto de palabras y espacios que terminan en un espacio, seguido de un tiempo (capturado en el grupo 2, y el tiempo supone que la hora siempre tiene 0 dígitos en 2). un ejemplo más cercano a lo que está buscando, pero la descripción de la posible entrada es un poco vaga.
¿Puedes mostrar tu código? Eso debería coincidir con las 06:30, siempre que todo lo demás esté en orden. –