Expresiones Regulares: Patrones de Búsqueda en Cadenas de Texto
¿Qué es una expresión regular? En la búsqueda de patrones en cadenas de texto, las expresiones regulares son la herramienta más efectiva para encontrar lo que necesitas.
Estas secuencias de caracteres especiales pueden parecer una especie de código secreto, pero en realidad son una forma poderosa de buscar y manipular texto.
- ¿Qué es una expresión regular?
- Componentes de una expresión regular
- Tipos de patrones en expresiones regulares
- Clases de caracteres en expresiones regulares
- Anclajes en expresiones regulares
- Cuantificadores en expresiones regulares
- Grupos y rangos en expresiones regulares
- Uso de expresiones regulares en diferentes lenguajes
¿Qué es una expresión regular?
Las expresiones regulares, también conocidas como regex, son patrones de búsqueda que se utilizan para buscar y manipular cadenas de texto.
Estas son una forma poderosa de buscar, validar y extraer información de cadenas de texto.
Una expresión regular es una secuencia de caracteres que actúa como un patrón para la búsqueda y manipulación de cadenas de texto.
Estas se utilizan en diversas funciones, como la función fn:matches, la función fn:replace y la función fn:tokenize, que se utilizan para buscar, reemplazar y dividir cadenas de texto en subcadenas.
Las expresiones regulares son muy útiles en una variedad de aplicaciones, como la validación de datos de entrada, la extracción de información de texto y la búsqueda de patrones en cadenas de texto.
Definición y función
Una expresión regular se define como una secuencia de caracteres que forma un patrón de búsqueda.
Este patrón se utiliza para buscar coincidencias en cadenas de texto.Las expresiones regulares se componen de metacaracteres y caracteres literales.
Los metacaracteres son caracteres especiales que tienen un significado especial en el contexto de las expresiones regulares.
Algunos de los metacaracteres más comunes son:
- : indica que el carácter siguiente es un carácter especial
- .: coincide con cualquier carácter
- ^: coincide con el inicio de la cadena de texto
- $: coincide con el final de la cadena de texto
- ?: indica que el carácter anterior es opcional
- *: indica que el carácter anterior puede aparecer cero o más veces
- +: indica que el carácter anterior debe aparecer al menos una vez
- |: indica una alternativa entre dos patrones
- [ y ]: indican un rango de caracteres
- ( y ): indican un grupo de patrones
Los caracteres literales son caracteres que se buscan en la cadena de texto sin ninguna modificación.
Ejemplos de expresiones regulares básicas
A continuación, se presentan algunos ejemplos de expresiones regulares básicas:
Ejemplo 1: Coincidir con cualquier carácter
.
Este patrón coincide con cualquier carácter en la cadena de texto.
Ejemplo 2: Coincidir con el inicio de la cadena de texto
^Hola
Este patrón coincide con la cadena de texto "Hola" solo si se encuentra al inicio de la cadena.
Ejemplo 3: Coincidir con un rango de caracteres
[a-zA-Z]
Este patrón coincide con cualquier carácter que esté entre "a" y "z" o "A" y "Z".
Ejemplo 4: Coincidir con un patrón opcional
colo(u)r
Este patrón coincide con la cadena de texto "color" o "colour".
Estos son solo algunos ejemplos básicos de expresiones regulares.
En la práctica, las expresiones regulares pueden ser mucho más complejas y poderosas.
Expresión regular | Descripción |
---|---|
^Hola | Coincidir con la cadena de texto "Hola" al inicio de la cadena |
[a-zA-Z] | Coincidir con cualquier carácter entre "a" y "z" o "A" y "Z" |
colo(u)r | Coincidir con la cadena de texto "color" o "colour" |
Las expresiones regulares son una herramienta poderosa para buscar y manipular cadenas de texto.
Conocer las diferentes opciones y metacaracteres disponibles es fundamental para crear patrones de búsqueda efectivos.
Componentes de una expresión regular
Las expresiones regulares (regex) se componen de varios componentes que trabajan en conjunto para definir patrones de búsqueda en cadenas de texto.
Estos componentes pueden ser divididos en dos categorías: metacaracteres y literales.
Los literales son los caracteres que coinciden exactamente con los caracteres en la cadena de texto que se está buscando.
Por ejemplo, si se busca la cadena "hello" en una expresión regular, "h", "e", "l", "l", "o" son todos literales.
Por otro lado, los metacaracteres son caracteres especiales que tienen un significado especial en el contexto de las expresiones regulares.
Estos metacaracteres se utilizan para definir patrones más complejos y flexibles de búsqueda.
Metacaracteres
Los metacaracteres son los componentes más importantes de las expresiones regulares.
Estos caracteres especiales tienen un significado especial y se utilizan para definir patrones de búsqueda más complejos.
A continuación, se presentan algunos de los metacaracteres más comunes:
- : El carácter de escape.
Se utiliza para escapar metacaracteres y darles un significado literal.
- .: El carácter de punto.
Coincide con cualquier carácter excepto un salto de línea.
- ^: El carácter de inicio de línea.
Coincide con el inicio de una cadena de texto.
- $: El carácter de fin de línea.
Coincide con el fin de una cadena de texto.
- ?: El carácter de cero o uno.
Coincide con el carácter precedente cero o una vez.
- *: El carácter de cero o más.
Coincide con el carácter precedente cero o más veces.
- +: El carácter de uno o más.
Coincide con el carácter precedente una o más veces.
- |: El carácter de OR.
Se utiliza para definir patrones alternativos.
- [ ]: Los corchetes.Se utilizan para definir un conjunto de caracteres.
- ( ): Los paréntesis.
Se utilizan para agrupar patrones y capturar subpatrones.
Efecto de los metacaracteres en las expresiones regulares
Cuando se utiliza un metacaracter en una expresión regular, cambia la forma en que se busca la cadena de texto.
Por ejemplo, si se utiliza el carácter de punto (.) en una expresión regular, coincide con cualquier carácter excepto un salto de línea.
Por ejemplo, la expresión regular a.c
coincide con cualquier cadena que contenga una "a", seguida de cualquier carácter, y luego una "c".
import re print(re.findall('a.c', 'abc adc aec')) # Output: ['abc', 'adc', 'aec']
Otro ejemplo es el carácter de inicio de línea (^).
Si se utiliza al principio de una expresión regular, coincide con el inicio de una cadena de texto.
import re print(re.findall('^hello', 'hello world')) # Output: ['hello']
Escape de caracteres especiales
Los metacaracteres tienen un significado especial en las expresiones regulares, por lo que si se desea buscar uno de estos caracteres literalmente, es necesario escaparlos con una barra invertida ().
Por ejemplo, si se desea buscar un punto (.) en una cadena de texto, es necesario escaparlo con una barra invertida:
import re print(re.findall('.', 'hello.world')) # Output: ['.', '.']
De lo contrario, el punto se interpretaría como un metacaracter y coincidiría con cualquier carácter excepto un salto de línea.
Es importante recordar que los metacaracteres deben ser escapados con una barra invertida para darles un significado literal en una expresión regular.
Tipos de patrones en expresiones regulares
Las expresiones regulares permiten definir patrones de búsqueda en cadenas de texto utilizando diferentes tipos de patrones.
Estos patrones se clasifican en tres categorías principales: patrones de caracteres, patrones de cadenas y patrones de números.
Cada tipo de patrón tiene sus propias características y se utilizan en función del tipo de búsqueda que se desee realizar.
Patrones de caracteres
Los patrones de caracteres se utilizan para buscar caracteres específicos en una cadena de texto.
Estos patrones se definen utilizando metacaracteres especiales que indican qué caracteres se deben buscar.
Algunos ejemplos de patrones de caracteres son:
- . (punto) que coincide con cualquier carácter excepto un salto de línea.
- w que coincide con cualquier carácter alfanumérico (letras o números).
- W que coincide con cualquier carácter no alfanumérico.
- d que coincide con cualquier dígito (número).
- D que coincide con cualquier carácter que no sea un dígito.
Por ejemplo, si queremos buscar todas las apariciones de la letra "a" en una cadena de texto, podemos utilizar el patrón a.
Si queremos buscar todas las apariciones de cualquier carácter alfanumérico, podemos utilizar el patrón w.
Patrones de cadenas
Los patrones de cadenas se utilizan para buscar cadenas de texto específicas en una cadena de texto.
Estos patrones se definen utilizando metacaracteres especiales que indican qué cadenas se deben buscar.
Algunos ejemplos de patrones de cadenas son:
- abc que coincide con la cadena "abc" exactamente.
- ab|cd que coincide con la cadena "ab" o "cd".
- a{3,5} que coincide con la cadena "a" entre 3 y 5 veces.
Por ejemplo, si queremos buscar todas las apariciones de la cadena "abc" en una cadena de texto, podemos utilizar el patrón abc.
Si queremos buscar todas las apariciones de la cadena "abc" o "def", podemos utilizar el patrón abc|def.
Patrones de números
Los patrones de números se utilizan para buscar números específicos en una cadena de texto.
Estos patrones se definen utilizando metacaracteres especiales que indican qué números se deben buscar.
Algunos ejemplos de patrones de números son:
- d{3} que coincide con cualquier número de 3 dígitos.
- d{1,3} que coincide con cualquier número de entre 1 y 3 dígitos.
- bd+b que coincide con cualquier número entero.
Por ejemplo, si queremos buscar todas las apariciones de números de 3 dígitos en una cadena de texto, podemos utilizar el patrón d{3}.
Si queremos buscar todas las apariciones de números enteros, podemos utilizar el patrón bd+b.
Clases de caracteres en expresiones regulares
En expresiones regulares, las clases de caracteres son un concepto fundamental para definir patrones de búsqueda en cadenas de texto.
Una clase de caracteres es un conjunto de caracteres que se consideran equivalentes en una búsqueda.
Las clases de caracteres se utilizan para especificar los caracteres que se desean buscar o coincidir en una cadena de texto.
Clases de caracteres predefinidas
Las clases de caracteres predefinidas son conjuntos de caracteres que se definen previamente y se utilizan comúnmente en expresiones regulares.
A continuación, se presentan algunas de las clases de caracteres predefinidas más comunes:
- d: coincide con cualquier dígito (0-9)
- D: coincide con cualquier carácter que no sea un dígito
- w: coincide con cualquier carácter alfanumérico (letras, dígitos y underscore)
- W: coincide con cualquier carácter que no sea alfanumérico
- s: coincide con cualquier carácter de espacio en blanco (espacio, tabulación, salto de línea, etc.)
- S: coincide con cualquier carácter que no sea de espacio en blanco
Cada una de estas clases de caracteres predefinidas puede ser utilizada para definir patrones de búsqueda en cadenas de texto.
Por ejemplo, la clase de caracteres d se puede utilizar para buscar dígitos en una cadena de texto.
Clases de caracteres definidas por el usuario
Además de las clases de caracteres predefinidas, también se pueden definir clases de caracteres personalizadas utilizando corchetes `[]`.
Estas clases de caracteres definidas por el usuario permiten especificar un conjunto específico de caracteres que se desean buscar o coincidir.
Por ejemplo, si se desea buscar cualquier carácter que sea una vocal (a, e, i, o, u), se puede definir una clase de caracteres como `[aeiou]`.
Esta clase de caracteres coincidirá con cualquier vocal en una cadena de texto.
Otro ejemplo es si se desea buscar cualquier carácter que sea una letra mayúscula (A-Z), se puede definir una clase de caracteres como `[A-Z]`.
Esta clase de caracteres coincidirá con cualquier letra mayúscula en una cadena de texto.
Es importante destacar que las clases de caracteres definidas por el usuario pueden ser utilizadas en combinación con las clases de caracteres predefinidas para crear patrones de búsqueda más complejos.
Continuaré con la siguiente sección...
Anclajes en expresiones regulares
Anclajes en expresiones regulares se refieren a los patrones que se utilizan para buscar coincidencias en una cadena de texto.
Estos anclajes son fundamentales en la creación de expresiones regulares eficaces y precisas.
Los anclajes en expresiones regulares pueden ser de diferentes tipos, cada uno con su propio propósito y función.
A continuación, se presentan los dos tipos más comunes de anclajes: anclajes de inicio y fin de cadena, y anclajes de palabra y no palabra.
Anclajes de inicio y fin de cadena
Los anclajes de inicio y fin de cadena son utilizados para buscar coincidencias al principio o al final de una cadena de texto.
El anclaje de inicio de cadena se representa con el carácter `^` (circunflejo).
Este anclaje indica que la búsqueda debe comenzar al principio de la cadena.Por ejemplo, la expresión regular `^Hola` buscará las cadenas que comienzan con la palabra "Hola".
Otro ejemplo de anclaje de inicio de cadena sería `^abc`, que buscará las cadenas que comienzan con la secuencia de caracteres "abc".
Por otro lado, el anclaje de fin de cadena se representa con el carácter `$` (dólar).
Este anclaje indica que la búsqueda debe terminar al final de la cadena.Por ejemplo, la expresión regular `Hola$` buscará las cadenas que terminan con la palabra "Hola".
Otro ejemplo de anclaje de fin de cadena sería `abc$`, que buscará las cadenas que terminan con la secuencia de caracteres "abc".
Anclajes de palabra y no palabra
Los anclajes de palabra y no palabra se utilizan para buscar coincidencias en palabras completas o no completas.
El anclaje de palabra se representa con el carácter `b` (barra invertida y 'b').
Este anclaje indica que la búsqueda debe coincidir con una palabra completa.Por ejemplo, la expresión regular `bHolab` buscará las cadenas que contienen la palabra "Hola" como una palabra completa.
Otro ejemplo de anclaje de palabra sería `babcb`, que buscará las cadenas que contienen la palabra "abc" como una palabra completa.
Por otro lado, el anclaje de no palabra se representa con
el carácter `B` (barra invertida y 'B').
Este anclaje indica que la búsqueda no debe coincidir con una palabra completa.Por ejemplo, la expresión regular `BHolaB` buscará las cadenas que contienen la palabra "Hola" como parte de una palabra más larga.
Otro ejemplo de anclaje de no palabra sería `BabcB`, que buscará las cadenas que contienen la secuencia de caracteres "abc" como parte de una palabra más larga.
Los anclajes en expresiones regulares son fundamentales para buscar coincidencias precisas en cadenas de texto.
Al entender cómo funcionan los anclajes de inicio y fin de cadena, así como los anclajes de palabra y no palabra, puede crear expresiones regulares más eficaces y precisas.
Cuantificadores en expresiones regulares
En expresiones regulares, los cuantificadores son una parte fundamental para definir patrones de búsqueda en cadenas de texto.
Estos permiten especificar la frecuencia de aparición de un patrón en una cadena de texto.
Cuantificadores de coincidencia
Los cuantificadores de coincidencia permiten especificar la cantidad de veces que un patrón debe aparecer en una cadena de texto para considerarse una coincidencia.
A continuación, se presentan algunos de los cuantificadores de coincidencia más comunes:
- *: El cuantificador de cero o más veces.
Este cuantificador indica que el patrón precedente puede aparecer cero o más veces en la cadena de texto.
- +: El cuantificador de una o más veces.
Este cuantificador indica que el patrón precedente debe aparecer al menos una vez en la cadena de texto.
- ?: El cuantificador de cero o una vez.
Este cuantificador indica que el patrón precedente puede aparecer cero o una vez en la cadena de texto.
- {n}: El cuantificador de exactamente n veces.
Este cuantificador indica que el patrón precedente debe aparecer exactamente n veces en la cadena de texto.
- {n,}: El cuantificador de al menos n veces.
Este cuantificador indica que el patrón precedente debe aparecer al menos n veces en la cadena de texto.
- {n,m}: El cuantificador de al menos n veces y como máximo m veces.
Este cuantificador indica que el patrón precedente debe aparecer al menos n veces y como máximo m veces en la cadena de texto.
Por ejemplo, si queremos buscar una cadena de texto que contenga la palabra "hello" seguida de una o más veces de la palabra "world", podríamos utilizar la siguiente expresión regular:
hello world*
En este caso, el cuantificador * indica que la palabra "world" puede aparecer cero o más veces después de la palabra "hello".
Cuantificadores de no coincidencia
Los cuantificadores de no coincidencia permiten especificar que un patrón no debe aparecer en una cadena de texto para considerarse una coincidencia.
A continuación, se presentan algunos de los cuantificadores de no coincidencia más comunes:
- ?! : El cuantificador de no coincidencia de cero o una vez.
Este cuantificador indica que el patrón precedente no debe aparecer o aparecer una sola vez en la cadena de texto.
- *? : El cuantificador de no coincidencia de cero o más veces.
Este cuantificador indica que el patrón precedente no debe aparecer cero o más veces en la cadena de texto.
- +? : El cuantificador de no coincidencia de una o más veces.
Este cuantificador indica que el patrón precedente no debe aparecer una o más veces en la cadena de texto.
- {n}? : El cuantificador de no coincidencia de exactamente n veces.
Este cuantificador indica que el patrón precedente no debe aparecer exactamente n veces en la cadena de texto.
- {n,}? : El cuantificador de no coincidencia de al menos n veces.
Este cuantificador indica que el patrón precedente no debe aparecer al menos n veces en la cadena de texto.
- {n,m}? : El cuantificador de no coincidencia de al menos n veces y como máximo m veces.
Este cuantificador indica que el patrón precedente no debe aparecer al menos n veces y como máximo m veces en la cadena de texto.
Por ejemplo, si queremos buscar una cadena de texto que no contenga la palabra "hello" seguida de una o más veces de la palabra "world", podríamos utilizar la siguiente expresión regular:
(?!hello world*)
En este caso, el cuantificador ?! indica que la palabra "hello" seguida de la palabra "world" no debe aparecer en la cadena de texto.
Es importante destacar que los cuantificadores de no coincidencia se utilizan en combinación con otros patrones y cuantificadores para crear expresiones regulares más complejas y precisas.
Grupos y rangos en expresiones regulares
En expresiones regulares, los grupos y rangos son fundamentales para definir patrones de búsqueda en cadenas de texto.
Estos permiten buscar patrones específicos en una cadena de texto y extraer información relevante.
Grupos de captura
Los grupos de captura en expresiones regulares se utilizan para agrupar partes de una cadena de texto que se desean buscar o extraer.
Estos grupos se definen utilizando paréntesis `()` y se pueden nombrar utilizando la sintaxis `(?
Los grupos de captura permiten:
- Reutilizar patrones en una expresión regular
- Extraer información específica de una cadena de texto
- Crear patrones más complejos y reutilizables
Por ejemplo, si queremos buscar una cadena de texto que contenga una fecha en formato `dd/mm/yyyy`, podemos utilizar un grupo de captura para extraer la fecha:
const regex = /(?<fecha>d{2}/d{2}/d{4})/; const texto = "La fecha de vencimiento es 25/12/2025"; const match = texto.match(regex); console.log(match.groups.fecha); // "25/12/2025"
En este ejemplo, el grupo de captura `fecha` se utiliza para extraer la fecha de la cadena de texto.
Rangos de caracteres
Los rangos de caracteres en expresiones regulares se utilizan para definir un conjunto de caracteres que se desean buscar en una cadena de texto.
Estos rangos se definen utilizando corchetes `[]` y se pueden especificar:
- Rangos de caracteres individuales, como `[abc]`
- Rangos de caracteres continuos, como `[a-z]` o `[0-9]`
- Caracteres especiales, como `[d]` para buscar dígitos
Por ejemplo, si queremos buscar una cadena de texto que contenga una palabra que comience con "a" o "b" y tenga entre 3 y 5 caracteres, podemos utilizar un rango de caracteres:
const regex = /b[a-b]{3,5}b/; const texto = "La palabra es azul"; const match = texto.match(regex); console.log(match); // "azul"
En este ejemplo, el rango de caracteres `[a-b]` se utiliza para buscar palabras que comiencen con "a" o "b".
Uso de expresiones regulares en diferentes lenguajes
Las expresiones regulares son una herramienta poderosa para buscar y manipular patrones en cadenas de texto, y su uso es ampliamente adoptado en diferentes lenguajes de programación.
A continuación, se presentan algunas de las formas en que se utilizan las expresiones regulares en Python, Java y JavaScript.
Expresiones regulares en Python
En Python, las expresiones regulares se utilizan a través de la biblioteca `re` (regex).
Esta biblioteca proporciona una forma de trabajar con expresiones regulares de manera sencilla y eficiente.
Algunas de las funciones más comunes de la biblioteca `re` son:
- `re.search(pattern, string)`: Busca la primera ocurrencia del patrón en la cadena.
- `re.match(pattern, string)`: Busca la primera ocurrencia del patrón en la cadena, empezando desde el principio.
- `re.findall(pattern, string)`: Retorna todas las ocurrencias del patrón en la cadena.
- `re.sub(pattern, repl, string)`: Reemplaza las ocurrencias del patrón en la cadena con la cadena de reemplazo.
Por ejemplo, para buscar todas las ocurrencias de la palabra "python" en una cadena, se podría utilizar el siguiente código:
import re string = "Python es un lenguaje de programación muy popular. Python es fácil de aprender." pattern = r"Python" matches = re.findall(pattern, string) print(matches) # Output: ['Python', 'Python']
Otro ejemplo sería buscar todas las direcciones de correo electrónico en una cadena:
import re string = "Puedes contactarme en [email protected] o en [email protected]." pattern = r"b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+.[A-Z|a-z]{2,}b" matches = re.findall(pattern, string) print(matches) # Output: ['[email protected]', '[email protected]']
Expresiones regulares en Java
En Java, las expresiones regulares se utilizan a través de la clase `java.util.regex.Pattern`.
Esta clase proporciona una forma de trabajar con expresiones regulares de manera sencilla y eficiente.
Algunas de las funciones más comunes de la clase `Pattern` son:
- `Pattern.compile(pattern)`: Compila el patrón y devuelve un objeto `Pattern`.
- `Matcher matcher = pattern.matcher(input)`: Crea un objeto `Matcher` que se utiliza para buscar el patrón en la cadena de entrada.
- `boolean matches = matcher.matches()`: Verifica si la cadena de entrada coincide con el patrón.
- `List
groups = matcher.group()`: Retorna una lista de los grupos de captura del patrón.
Por ejemplo, para buscar todas las ocurrencias de la palabra "java" en una cadena, se podría utilizar el siguiente código:
import java.util.regex.Pattern; import java.util.regex.Matcher; String string = "Java es un lenguaje de programación muy popular. Java es fácil de aprender."; String pattern = "Java"; Pattern p = Pattern.compile(pattern); Matcher matcher = p.matcher(string); while (matcher.find()) { System.out.println("Encontrado en la posición " + matcher.start()); }
Expresiones regulares en JavaScript
En JavaScript, las expresiones regulares se utilizan a través del objeto `RegExp`.
Este objeto proporciona una forma de trabajar con expresiones regulares de manera sencilla y eficiente.
Algunas de las propiedades y métodos más comunes del objeto `RegExp` son:
- `RegExp(pattern, flags)`: Crea un objeto `RegExp` con el patrón y las banderas especificadas.
- `string.match(regexp)`: Busca la primera ocurrencia del patrón en la cadena.
- `string.replace(regexp, replacement)`: Reemplaza las ocurrencias del patrón en la cadena con la cadena de reemplazo.
- `regexp.test(string)`: Verifica si la cadena coincide con el patrón.
Por ejemplo, para buscar todas las ocurrencias de la palabra "javascript" en una cadena, se podría utilizar el siguiente código:
const string = "JavaScript es un lenguaje de programación muy popular. JavaScript es fácil de aprender."; const pattern = /javascript/gi; const matches = string.match(pattern); console.log(matches); // Output: ['JavaScript', 'JavaScript']
Otro ejemplo sería buscar todas las direcciones de correo electrónico en una cadena:
const string = "Puedes contactarme en [email protected] o en [email protected]."; const pattern = /b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+.[A-Z|a-z]{2,}b/g; const matches = string.match(pattern); console.log(matches); // Output: ['[email protected]', '[email protected]']
Las expresiones regulares son una herramienta poderosa para buscar y manipular patrones en cadenas de texto, y su uso es ampliamente adoptado en diferentes lenguajes de programación.
Aunque cada lenguaje tiene sus propias características y formas de trabajar con expresiones regulares, el concepto básico es el mismo: buscar patrones en cadenas de texto.
Si quieres conocer otros artículos parecidos a Expresiones Regulares: Patrones de Búsqueda en Cadenas de Texto puedes visitar la categoría Programación.
Entradas Relacionadas 👇👇