cheatsheet-regex

Cheatsheet de Regular Expressions

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.

Pruébalo online

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
https://www.demo.com
email@domain.com
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum

Sintaxis

Sintaxis

| 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.

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.

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".

Clases de caracteres

[] Define una clase de caracteres.

[^] Define una clase de caracteres negativa.

[-] Define un rango de caracteres.

[,] Define varias clases de caracteres.

[abc] Coincide con cualquier caracter entre los corchetes.

[abc]+ #coincidirá con "a", "abc", "caba", etc.

[^abc] Coincide con cualquier caracter que no esté entre los corchetes.

[^abc]+ #coincidirá con "123", "_!@", etc.

[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.

[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.

[0-9] Coincide con cualquier dígito.

[0-9]+ #coincidirá con "123", "4567", 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.

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.

Ejemplos de Expresiones Regulares

Encontrar todas las palabras Encuentra todas las palabras en un texto.

\b\w*\b

Encontrar todas las palabras que empiezan por mayúscula Encuentra todas las palabras que comienzan por una letra mayúscula.

\b[A-Z]\w*\b

Encontrar todos los números en un texto Encuentra todas las secuencias de uno o más dígitos en un texto.

\b\d+\b

Encontrar palabras con una longitud específica Encuentra palabras que tengan exactamente 5 letras.

\b\w{5}\b

Encontrar una etiqueta <img> de HTML Encuentra todas las etiquetas <img> de HTML, incluyendo cualquier atributo que puedan tener.

<img\b[^>]*>

Encontrar los enbabecados de Markdown Encuentra los encabezados de Markdown desde #hasta######`, seguidos de cero o más espacios, y captura el texto del encabezado.

^#+\s*(.*)

Coincidir Números de Teléfono en un formato específico Encuentra números de teléfono en el formato +34 600-00-00-00 con posibles separadores.

(\+\d{2})+([ -_])?\d{0,3}([ -_])?\d{0,3}([ -_])?\d{0,3}([ -_])?\d{0,7}

Coincidir Direcciones de Correo Electrónico Encuentra direcciones de correo electrónico válidas.

[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}

Coincidir Fechas en Formato MM/DD/YYYY Encuentra fechas en formato MM/DD/YYYY.

(0[1-9]|1[0-2])\/(0[1-9]|[12][0-9]|3[01])\/(19|20)\d{2}

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}")

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)