Extracción de texto
Una expresión regular define un patrón de búsqueda para cadenas de caracteres. Tras realizar una búsqueda utilizando el patrón definido, obtendremos un resultado de búsqueda. Ese resultado consiste en una serie de coincidencias con ese patrón, los cuales podemos extraer para trabajar con ellos.
Tomemos como referencia el siguiente texto:
Puedes llamar a nuestra tienda de Santiago al teléfono 981002233 de 9:00h a 12:00h
o a nuestra tienda de Vigo al teléfono 986009988 de 16:30h a 23:00h.
Detectar los números de teléfono en el texto es sencillo, ya que los números de teléfono son 9 números consecutivos. Es decir, la expresión regular que coincidiría con los números de teléfono sería [0-9]{9} o \d{9} (ambas expresiones regulares son equivalentes).
Veamos como se buscarían en Java:
String str = "Puedes llamar a nuestra tienda de Santiago al teléfono 981002233 de 9:00h a 12:00h" +
"o a nuestra tienda de Vigo al teléfono 986009988 de 16:30h a 23:00h.";
Pattern pattern = Pattern.compile("[0-9]{9}");
Matcher matcher = pattern.matcher(str);
while(matcher.find()) {
int start = matcher.start();
int end = matcher.end();
String match = str.substring(start, end); // Extraer coincidencia.
System.out.println(match); // Mostrar coincidencia.
}
El código anterior muestra:
981002233
986009988
Si, por ejemplo, queremos extraer las horas, podemos utilizar la siguiente expresión regular: [0-9]{1,2}:[0-9]{2}h.
La expresión se compone de:
| Parte | Descripción |
|---|---|
[0-9]{1,2} | Corresponde con las horas: antes de los dos puntos, podemos tener una cifra o dos. |
: | Dos puntos que separan las horas de los minutos. |
[0-9]{2} | Corresponde con los minutos: después de los dos puntos, tenemos siempre dos cifras. |
h | Después de los minutos se coloca una h. |
String str = "Puedes llamar a nuestra tienda de Santiago al teléfono 981002233 de 9:00h a 12:00h" +
"o a nuestra tienda de Vigo al teléfono 986009988 de 16:30h a 23:00h.";
Pattern pattern = Pattern.compile("[0-9]{1,2}:[0-9]{2}h");
Matcher matcher = pattern.matcher(str);
while(matcher.find()) {
int start = matcher.start();
int end = matcher.end();
String match = str.substring(start, end); // Extraer coincidencia.
System.out.println(match); // Mostrar coincidencia.
}
El código anterior muestra:
9:00h
12:00h
16:30h
23:00h
Con el código anterior es posible extraer números de teléfonos y hora, pero es posible utilizar menos código para obtener el mismo resultado utilizando grupos.