Extraer elementos de una cadena con una expresión regular

Publicado por pico.dev el .
blog-stack java planeta-codigo programacion
Comentarios

Java

Las expresiones regulares son muy útiles para comprobar si una cadena de texto o un subconjunto de ella cumple un determinado patrón. Un uso común de las expresiones regulares es para validar cadenas de texto pero también pueden usarse para obtener coincidencias de la cadena, esto se hace con los grupos de captura.

Por ejemplo, supongamos que tenemos un código de un producto formateado de la siguiente forma 123-123456/1, usando guiones y una barra para separar tres grupos de números. Y ahora aparte de validar el formato correcto del código del producto nos interesa obtener los tres grupos de números. En vez de separar la cadena con un split por el caracter guión y barra de una forma que sería más laboriosa y difícil de mantener si hay algún cambio, vamos a usar los grupos de captura para obtener los tres grupos de números que forman el código.

Los grupos de captura se especifican mediante paréntesis, «(» y «)», en la expresión regular. En el caso del código usaremos la siguiente expresión regular:

En Java con la clase Pattern y Matcher podemos hacer las validaciones y obtener los grupos de captura de la usando el método group de la clase Matcher:

Extracción de valores de una cadena usando una expresión regular

Esto simplifica el extraer los valores de un cadena, de una manera menos frágil y más fácil de leer posteriormente el código fuente que usar la función split por uno o varios determinados caracteres, esta es una cadena bastante sencilla si el patrón es más complejo el código usando split puede complicarse notablemente.

La clase Matcher contiene más métodos útiles, por ejemplo, con los métodos start y end nos es posible conocer la posición inicial y final de cada grupo de captura. En el caso del código de este ejemplo ya los conocemos de antemano pero usando alguna expresión que capture un número varible de caracteres como «X+», «X*», «X{n,}» o «{X{n,m}}» nos permitirá conocer las posiciones inicial y final.

El código fuente completo del ejemplo puedes descargarlo del repositorio de ejemplos de Blog Bitix alojado en GitHub y probarlo en tu equipo ejecutando el comando ./gradlew run.

Yo apoyo al software libre