Las expresiones regulares son patrones de texto utilizados para buscar y manipular cadenas de caracteres. Son ampliamente utilizadas en programación para tareas como búsqueda, validación y sustitución de texto.
Caracteres
.
Coincide con cualquier caracter, excepto nueva línea.
a.c #coincidirá con "abc", "a+c", "a!c", etc.
\w
Coincide con cualquier carácter de palabra (letra, número, guión bajo).
\w+ #coincidirá con "word123", "hello_world", "123", etc.
\W
Coincide con cualquier carácter que no sea de palabra.
\W+ #coincidirá con "_!@#", "-$%", etc.
\d
Coincide con cualquier dígito.
\d{3} #coincidirá con "123", "456", etc.
\D
Coincide con cualquier caracter que no sea dígito.
\D+ #coincidirá con "abc", "_!@", etc.
Espacios y saltos
\n
Coincide con una nueva línea.
\t
Coincide con un tabulador.
\s
Coincide con cualquier espacio en blanco.
\s+ #coincidirá con " ", " ", "\t\t", etc.
\S
Coincide con cualquier caracter que no sea espacio en blanco.
\S+ #coincidirá con "word", "123", "_!@", etc.
Cuantificadores
\*
Coincide con 0 o más ocurrencias del patrón anterior.
a* #coincidirá con "", "a", "aa", "aaa", etc.
+
Coincide con 1 o más ocurrencias del patrón anterior.
b+ #coincidirá con "b", "bb", "bbb", etc.
?
Coincide con 0 o 1 ocurrencia del patrón anterior.
c? #coincidirá con "", "c", etc.
{n}
Coincide exactamente con n ocurrencias del patrón anterior.
d{3} #coincidirá con "ddd".
{n,}
Coincide con al menos n ocurrencias del patrón anterior.
e{2,} #coincidirá con "ee", "eee", "eeee", etc.
{n,m}
Coincide con entre n y m ocurrencias del patrón anterior.
f{1,3} #coincidirá con "f", "ff", "fff", etc.
Clases de caracteres
[]
Define una clase de caracteres.
[abc]
Coincide con cualquier caracter entre los corchetes.
[abc]+ #coincidirá con "a", "abc", "caba", etc.
[^]
Define una clase de caracteres negativa.
[^abc]
Coincide con cualquier caracter que no esté entre los corchetes.
[^abc]+ #coincidirá con "123", "_!@", etc.
[-]
Define un rango de caracteres.
[a-z]
Coincide con cualquier caracter en el rango de a a z.
[a-z]+ #coincidirá con "hello", "example", etc.
[A-Z]
Coincide con cualquier caracter en el rango de A a Z.
[A-Z]+ #coincidirá con "UPPER", "CASE", etc.
[0-9]
Coincide con cualquier dígito.
[0-9]+ #coincidirá con "123", "4567", etc.
[,]
Define varias clases de caracteres.
[a-z,A-Z]
Coincide con cualquier caracter en el rango de a a z o A-Z.
[a-z,A-Z]+ #coincidirá con "Upper", "CASE", "lower" etc.
Agrupación y composición
|
Alternancia, coincide con uno de varios patrones.
g|h #coincidirá con "g" o "h".
()
Agrupación de patrones.
(hi)+ #coincidirá con "hi", "hihi", "hihihi", etc.
\
Carácter de escape para caracteres especiales.
(hi)+ #coincidirá con "hi", "hihi", "hihihi", etc.
Anchors y limites
^
Coincide con el inicio de la línea.
^start #coincidirá con "start of line", "start_here", etc.
$
Coincide con el final de la línea.
end$ #coincidirá con "end of line", "goes to end", etc.
\b
Coincide con el límite de una palabra.
\bword\b #coincidirá con "word", "wording", "my_word", pero no
"sword".
\B
Coincide con el límite de una no-palabra.
\Bnon\B #coincidirá con "non-stop", "intrinsic", pero no "nonprofit".
Modificadores inline
(?i)
Modificador de case-insensitive.
(?i)hello #coincidirá con "hello", "HELLO", "hElLo", etc.
(?m)
Modificador de multiline.
(?m)^start #coincidirá con "start of line", "start here", etc.
(?s)
Modificador de dotall.
(?s)start.*end #coincidirá con "start\nmiddle\nend".
(?x)
Modificador de verbose.
(?x) a b c # coincidirá con "a b c", ignorando los espacios.
Lookarounds
(?=patrón)
Positive lookahead, coincide si el siguiente texto coincide con patrón
.
(?!patrón)
Negative lookahead, coincide si el siguiente texto NO coincide con patrón
.
(?<=patrón)
Positive lookbehind, coincide si el texto anterior coincide con patrón
.
(?<!patrón)
Negative lookbehind, coincide si el texto anterior NO coincide con patrón
.
Banderas
Las banderas (flags) se utilizan junto con expresiones regulares para modificar su comportamiento durante la búsqueda de coincidencias en una cadena de texto.
En C#, las banderas se pueden especificar como argumentos adicionales al compilar la expresión regular con Regex.Compile(). Por ejemplo:
Regex.Compile("patrón", RegexOptions.IgnoreCase) para la bandera IgnoreCase
Regex.Compile("patrón", RegexOptions.Multiline) para la bandera Multiline
Regex.Compile("patrón", RegexOptions.Singleline) para la bandera Singleline
Regex.Compile("patrón", RegexOptions.IgnorePatternWhitespace) para la bandera IgnorePatternWhitespace
/patrón/i para la bandera i (insensitive)
/patrón/g para la bandera g (global)
/patrón/m para la bandera m (multiline)
/patrón/s para la bandera s (dotall)
/patrón/u para la bandera u (unicode)
En Python, las banderas se pueden especificar como argumentos adicionales al compilar la expresión regular con re.compile(). Por ejemplo:
re.compile(r'patrón', re.I) para la bandera I (insensitive)
re.compile(r'patrón', re.M) para la bandera M (multiline)
re.compile(r'patrón', re.S) para la bandera S (dotall)
re.compile(r'patrón', re.U) para la bandera U (unicode)
Ejemplos de uso en distintos lenguajes
En estos ejemplos, la expresión regular utilizada es \broja\b
, que busca la palabra “roja” como una palabra completa. Los ejemplos buscan esta palabra en el texto “La casa es roja y azul.” y muestran las coincidencias encontradas.
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string texto = "La casa es roja y azul.";
// Patrón para buscar la palabra "roja"
string patron = @"\broja\b";
// Crear el objeto Regex
Regex regex = new Regex(patron);
// Buscar coincidencias
MatchCollection coincidencias = regex.Matches(texto);
// Imprimir las coincidencias
foreach (Match coincidencia in coincidencias)
{
Console.WriteLine($"Encontrado: {coincidencia.Value}");
}
}
}
let texto = "La casa es roja y azul.";
// Patrón para buscar la palabra "roja"
let patron = /\broja\b/g;
// Buscar coincidencias
let coincidencias = texto.match(patron);
// Imprimir las coincidencias
coincidencias.forEach(coincidencia => {
console.log(`Encontrado: ${coincidencia}`);
});
import re
texto = "La casa es roja y azul."
# Patrón para buscar la palabra "roja"
patron = r'\broja\b'
# Buscar coincidencias
coincidencias = re.findall(patron, texto)
# Imprimir las coincidencias
for coincidencia in coincidencias:
print(f"Encontrado: {coincidencia}")