Introducción a las Expresiones Regulares
Expresiones Regulares: Potencia y Aplicación Práctica
Creación y Uso de Expresiones Regulares en Distintos Lenguajes
Expresiones Regulares: Búsqueda y Validación de Patrones de Texto
Búsqueda de Teléfonos con Expresiones Regulares
El lenguaje: caracteres, operadores, y construcciones
Uso de Expresiones Regulares para Buscar y Reemplazar Texto
Búsqueda Avanzada con Expresiones Regulares: Clases y Caracteres
Operadores en Expresiones Regulares: Asterisco, Más e Interrogación
Contadores en Expresiones Regulares: Uso y Aplicaciones Prácticas
Expresiones Regulares: Uso de Lazy Matching en CSVs
Negación de Clases y Construcción de Expresiones Regulares
Expresiones Regulares para Filtrar Números Telefónicos
Expresiones Regulares para Procesar Archivos CSV Masivos
Uso práctico de Expresiones Regulares
Expresiones Regulares para Análisis de Logs UNIX
Creación de Expresiones Regulares para Validación de Teléfonos
Expresiones Regulares para Validar URLs y Dominios Web
Validación de Correos Electrónicos con Expresiones Regulares
Expresiones Regulares para Coordenadas Geográficas
Validación de Nombres Propios y Apellidos en Regex
Usos avanzados en Expresiones Regulares
Expresiones Regulares: Aplicaciones Prácticas en Manipulación de Datos
Expresiones Regulares en lenguajes de programación
Extracción de Variables en URLs con Expresiones Regulares
Uso de Expresiones Regulares en Perl, PHP, Python y JavaScript
Extracción de Información con Expresiones Regulares en Perl
Expresiones Regulares en PHP: Filtrado de Datos CSV
Análisis de Datos de Partidos de Fútbol con Expresiones Regulares
Expresiones Regulares en Python para Análisis de Datos
Lectura de Archivos en Java con BufferReader
Expresiones Regulares en Java: Búsqueda y Filtrado de Datos
Validación de Emails con JavaScript y Expresiones Regulares
Expresiones Regulares en Línea de Comandos UNIX y Windows
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
En el fascinante mundo de las expresiones regulares, reconocer y trabajar con clases de caracteres es esencial. Las clases definen conjuntos específicos de caracteres que se pueden usar para búsquedas sofisticadas en cadenas de texto. Estas clases sirven para simplificar y precisar la búsqueda de patrones en textos, permitiéndonos especificar conjuntos como caracteres de palabras (\w
), dígitos (\d
) y espacios en blanco (\s
).
Las clases de caracteres pueden definirse usando rangos o conjuntos específicos dentro de corchetes. Por ejemplo:
[0-9]
incluye cualquier dígito del 0 al 9.[A-Z]
representa cualquier letra mayúscula de la A a la Z.[a-z]
cubre cualquier letra minúscula.Estas clases permiten realizar búsquedas más eficaces en grandes volúmenes de texto.
Los operadores de cantidad controlan cuántas veces un elemento debe aparecer para que se considere un "match" en una expresión regular. Entenderlos te dará el poder de realizar búsquedas detalladas y precisas.
*
): Permite que un elemento aparezca cero o más veces. Es el operador 'greedy' por excelencia, ya que trata de incluir tantas coincidencias como sea posible.+
): Requiere que el elemento aparezca al menos una vez.?
): Indica que el elemento es opcional, permitiendo que aparezca cero o una vez.Si deseamos buscar cualquier carácter en un texto, podemos usar el punto seguido de asterisco (.*
), que encontrará todos los caracteres en una línea. Si buscamos un patrón más específico como "un dígito seguido de letras", podemos combinar clases de caracteres con operadores:
\d+[A-Za-z]
Esta expresión encuentra cualquier secuencia de uno o más dígitos seguida de alguna letra, ya sea mayúscula o minúscula.
Las expresiones regulares son una herramienta poderosa para resolver problemas complejos en el análisis y manipulación de textos. Su aplicación práctica incluye desde la validación de entradas de usuario hasta la extracción de información específica de documentos.
Consejo práctico: Al enfrentar un problema que requiere resolver con expresiones regulares, tómate tu tiempo para estudiar y definir la mejor solución posible. Una expresión bien construida puede ser una herramienta duradera y versátil en múltiples contextos.
Imagina que necesitas encontrar secuencias específicas en un texto masivo. Usando la combinación de clases y operadores, podemos construir una expresión para encontrar secuencias numéricas seguidas de letras:
\d+[A-Z]*
Esta sencilla expresión busca uno o más dígitos seguidos por cero o más letras mayúsculas. Perfecta para analizar cadenas de código o validar identificaciones alfanuméricas.
Las expresiones regulares pueden intimidar al principio, pero con paciencia y práctica, se convierten en una herramienta inestimable. ¡Adelante, sigue explorando nuevos usos y perfeccionando tus habilidades!
Aportes 128
Preguntas 24
Cuantificación en expresiones regulares:
? -> El signo de interrogación indica que el carácter que le precede puede aparecer como mucho una vez. Por ejemplo, “ob?scuro” se corresponde con oscuro y obscuro.
+ -> El signo más indica que el carácter que le precede debe aparecer al menos una vez. Por ejemplo, “ho+la” describe el conjunto infinito hola, hoola, hooola, hoooola, etcétera.
* -> El asterisco indica que el carácter que le precede puede aparecer cero, una, o más veces. Por ejemplo, “0*42” se corresponde con 42, 042, 0042, 00042, etcétera.
+ --> 1 o más.
Incluye solo si aparece este dato
*--> 0 o más
No importa en sí, pero estaría bueno que sí lo encontraras sin importar cuantas veces te salgan.
? --> 0 o 1 vez.
No importa si no lo encuentras, pero si lo haces, SOLO ME SIRVE UNA VEZ, el resto está de más.
Recomiendo esta lectura Denial of Service, para cuando diseñen un regex y evitemos las vulnerabilidadescomo por ejemplo el ataque Denial of Service - ReDoS.
Esto se va a descontrolaaaaaaaaarrrrr.
Recomiendo el siguiente website para seguir y entender mas claro como funcionan las REGEXR
Entonces los delimitadores van del lado derecho de la expresión y se leen de derecha a izquierda.
Ejemplos:
\d*
→ 0 o más dígitos.[a-z]?
→ 0 o 1 letra minúscula.\s+
→ 1 o más espacios.Tendiendo el patrón que usa Beco:
\d*[a-z]?s\d*
No entiendo porque encuentra el fragmento “sys” de la palabra system.
Según entiendo:
Por lo que en la palabra “system”:
No debería solo marcar “ys” en la palabra “system”. No entiendo esa parte.
\w - caracteres de palabras
\d - digitos
\s - espacios/invisibles en blanco
[0-9] ~ \d
[0-9a-zA-Z] ~ \w
*
→ Haya o no haya [Seleccionar todo, operador greedy]
Ejemplo: \d*[a-tA-T]
Se lee: Seleccione el carácter que se encuentra en el rango de la a
a la t
, (Tanto minúsculas como mayúsculas) y TODOS los números que lo preceden, EXISTAN O NO.
Así, del siguiente ejemplo seleccionará
12345T
exto
12345Te
xto
+
→Haya uno o más [Debe haber]
Ejemplo: \d+[a-tA-T]
Se lee: Seleccione las secuencias de caracteres que contengan AL MENOS UN dígito, seguido de un carácter que se encuentre en el rango de la a
a la t
, (Tanto minúsculas como mayúsculas).
Así pues, del siguiente ejemplo seleccionará
12345T
exto
12345 Texto
?
→Haya cero o uno (Puede haber sólo uno)
Ejemplo: \d?[a-tA-T]
Se lee: Seleccione las secuencias de caracteres QUE CONTENGAN O NO, UN SOLO dígito, seguido de un carácter que se encuentre en el rango de la a
a la t
, (Tanto minúsculas como mayúsculas).
Así pues, del siguiente ejemplo seleccionará
1234
5Te
xto
12345Te
xto
Ejemplo complejo: \[[a-zA-Z]*:?@+[a-zA-Z]*\]
Se lee: Seleccione las secuencias de caracteres que:
[
:
@
]
Así pues, del siguiente ejemplo seleccionará
[LOG ENTRY] [LOG] Everything is OK
[LOG ENTRY] [LOG][:@beco]
Logged in
[LOG ENTRY] [LOG][USER:@beco]
Clicked here
[LOG ENTRY] [LOG][user@@@@]
Rated the app
[LOG ENTRY] [LOG][user:@beco]
Logged out
[LOG ENTRY] [LOG] [user:beco] test
( * ) Todo. Cero o muchos. El profe dice 0 o 1
Venía de esta clase : https://platzi.com/clases/1468-bash-shell/16970-expresiones-regulares/
Dónde están las descripciones de los criterios de las expresiones regulares… así nomás:
*.- Caracter que representa cero o más ocurrencias de la expresión
+.- Caracter que representa una o más ocurrencias de la expresión.
{n}.-Representa n veces de una expresión.
[ ] .- Representa un conjunto de caracteres, por ejemplo: [a-z] representa las letras del abecedario de la a a la z.
bueno acá después de 7 clases me han quedado claras 😃 , gracias!!
Aquí hay un articulo para que sepan como corroborar un email con regExp https://platzi.com/tutoriales/1301-expresiones-regulares/9435-como-saber-si-un-correo-esta-bien-escrito-con-regexp/
Por qué cuando yo pongo [a-z] también encuentra las mayúsculas?
6. Mis apuntes sobre: "Los delimitadores: +,*,? "
Resumen hasta hoy#p132:
\w - caracteres de palabras
\d - dígitos
\s - espacios/invisibles en blanco
[0-9] ~ \d
[0-9a-zA-Z_] ~ \w
* - greedy - todo
+ - uno o más
? - cero o uno, en otro contexto (Sean los menos posibles)
.*
-Explicación 1: Encuentra un caracteres y sigue seleccionando hasta el final de la linea.
’
’
\d+
-Explicación 2: Encuentra un dígito, luego 1 o más hasta que no haya.
’
’
\d*[a-z]
-Explicación 3: Encuentra y selecciona: Toda vez que se inicie o no con un dígito,
y siga y termine con una letra de la a a la z.
’
’
\d*[a-z][a-z]?
-Explicación 4: Encuentra y selecciona: Toda vez que haya o no un dígito, luego
haya una letra de la a a la z, y luego haya o no una letra.
’
’
\d*[a-z]?s\d*
-Explicación 5: Encuentra y selecciona: Cero o muchos dígitos, y cero o una letras de la
a a la z y una letra ‘s’ y cero o muchos dígitos.
’
’
Les recomiendo practicar en esta web donde hay lecciones.
Los cuantificadores en expresiones regulares son metacaracteres que te permiten controlar la cantidad de veces que un elemento o grupo puede aparecer en una cadena de texto. Los cuantificadores te ayudan a especificar si un elemento debe aparecer una cantidad específica de veces, si puede ser opcional o si puede repetirse un número variable de veces.
Aquí están algunos de los cuantificadores más comunes en expresiones regulares:
*
: Cero o más veces: Indica que el elemento anterior puede aparecer cero o más veces en el texto. Por ejemplo, a*
coincidirá con “a”, “aa”, “aaa”, y así sucesivamente.
+
: Una o más veces: Indica que el elemento anterior debe aparecer al menos una vez, pero puede repetirse múltiples veces. Por ejemplo, a+
coincidirá con “a”, “aa”, “aaa”, pero no con una cadena vacía.
?
: Cero o una vez: Indica que el elemento anterior es opcional y puede aparecer cero o una vez en el texto. Por ejemplo, colou?r
coincidirá tanto con “color” como con “colour”.
{n}
: Exactamente n veces: Indica que el elemento anterior debe aparecer exactamente n veces en el texto. Por ejemplo, a{3}
coincidirá con “aaa”.
{n,}
: Al menos n veces: Indica que el elemento anterior debe aparecer al menos n veces en el texto. Por ejemplo, a{2,}
coincidirá con “aa”, “aaa”, “aaaa”, y así sucesivamente.
{n,m}
: Entre n y m veces: Indica que el elemento anterior debe aparecer al menos n veces y como máximo m veces en el texto. Por ejemplo, a{2,4}
coincidirá con “aa”, “aaa” y “aaaa”.
*?
, +?
, ??
, {n,}?
, {n,m}?
: Cuantificadores perezosos: Estos cuantificadores hacen que la coincidencia sea lo más corta posible. Por defecto, los cuantificadores son “codiciosos”, lo que significa que tratan de encontrar la mayor cantidad de coincidencias posible. Agregando ?
después del cuantificador, se vuelve “perezoso”.
Es importante tener en cuenta que los cuantificadores se aplican al elemento inmediatamente anterior. Si deseas aplicar un cuantificador a un grupo de caracteres, asegúrate de encerrar ese grupo entre paréntesis. Los cuantificadores son útiles para crear patrones más flexibles y poderosos en expresiones regulares.
Regex | Qué hace | Descripción |
---|---|---|
. |
Character | Cualquier caracter, selecciona cada uno de los caracteres |
/d |
Digit | Digits: (d minúscula) Encuentra todos los dígitos (número) de 0 a 9, es equivalente a poner [0-9]. |
/w |
Word | All word characters, Encuentra todos los caracteres que son parte de una palabra, tanto letras (minúsculas o mayúsculas) como números, es equivalente a poner [a-zA-Z0-9_]. |
/s |
Space | WhiteSpaces, Encuentra todos los espacios (los saltos de línea y tabuladores también son espacios). |
[0-9] | Specific Digit | Encuentra todos los dígitos de 0 a 9. |
[0-9a-zA-Z] | Specific Word Character | Encontrará todos los caracteres que estén del 0-9 o que sean letras mayúsculas o minúsculas (\w ) |
[a-zA-Z] | nos encontrará solamente las letras, tanto mayúsculas como minúsculas. | |
\ |
Diagonal invertida | Escapa los caracteres, permite que un carácter especial se muestre |
* | Greedy | Agrupa el conjunto de caracteres (la búsqueda) (0 o muchas) |
+ | 1 o más | Deben aparecer (debe aparecer uno o más) |
? | Puede o no haber |
Aqui hay una pagina que permite ver de manera grafica todo esto
https://jex.im/regulex/#!flags=&re=^(a|b)*%3F%24
espero les sirva
+
- debe aparecer porque es uno o más veces
*
- puede aparecer, 0 o muchas veces
?
- puede aparecer, 0 o 1 veces
Las expresiones regulares son muy potentes creando soluciones escalables y reutilizables para el manejo de textos.
Todo es potente
El caracter (.): Encuentrame todo lo que sea un carácter
Dígitos:\d Encuentra todos los dígitos de 0 a 9.
[0-2] nos encontrará solamente los dígitos de 0 a 2.
() : Cero o más veces
(?): Cero o una sola vez
(+): una o más veces.
[a-z]? : Esto es que puede estar una sola vez o no estar una letra minuscula de la (a) a la (z).
\d: Esto es que puede estar muchas veces o no estar un digito.
\d+: Esto es que puede estar muchas veces o una sola vez un digito.
\w caracteres de palabras
\d caracteres de dígitos
\s Espacios en blancos e invisibles
. :* Encuentra todos los caracteres que se sigan desde cero o ninguno. No importan si son numéricos, palabras o símbolos.
+: Encuentra 1 o mas, 1 o todos.
? : Encuentra cero o un carácter.
\d+[a-z]: Encuentra todos los dígitos pero que al final debe tener una palabra.
\d[a-z]:* Debe de haber letras pero puede que tenga o no tenga digito
\d[a-z]?s:* Encuentra todos los dígitos pero que a su vez tengan un carácter y que este carácter termine con la letra s
No es mucho pero estoy contento por que lo hice yo solo.
++^.+@.+…+ ++
quice hacer una expresion para buscar correos electronicos.
\w caracteres
\d dígitos
\s espacios
[0-9] ~ \d
[0-9a-zA-Z_] ~ \w
greddy - todo - cero o muchas -> *
uno o más -> +
cero o uno -> ?
.* -> encuentra todos los caracteres
\d* -> encuentra todos los dígitos
\d+ -> encuentra uno o mas
\d? -> cero o uno
\d+[a-z] tiene que haber un dígito antes de las letras
\d*[a-z] tiene o no que haber números antes de las letras
Por si les sirve.
Algo asi lo entendi…
No me quede muy claro la diferencia entre * y ?. Solo la parte que los dos son opcionales al momento de crear una expresión
Debe aparecer
+ : 1 o mas caracteres
Pueden aparecer
* : 0 o muchas .
? : 0 o 1 caracter
Interpretar la presencia de los delimitadores en las expresiones puede suponer cierta dificultad, por tanto les comparto la manera que se me ha facilitado interpretalas, que consiste en leer la expresion regular de derecha a izquierda lentamente, de forma inversa a la habitual.
espero les pueda ayudar.
Se nota que mejoro bastante la forma de enseñar! Sumando también que nos brindan el material para practicar, y ahora el profesor es mas pausado al momento de explicar. Genial!! 😃
estuvo un poco omplicado esta clase, tuve q pausarb el video y ir practicando yo mismo para poder entender,
Se nota la buena energia que le pone el profe, pero termina haciendo parecer el tema peor de lo que es…
Son bastante útiles estos delimitadores para organizar las cadenas de caracteres que van a ser ingresadas en una barra de búsqueda o un segmento de un formulario.
Hola espero que este aporte los encuentre bien aquí les dejo una pagina de cheat sheets muy útiles, que la disfruten 😁.
RegEx cheat sheet
Regexr nos puede ayudar al observar, revisar y crear expresiones regulares
NO se entiende lo que explica, creo que requiere ejemplos mas especificos
Me costo entender el + y el * pero viendolo varias veces pude entender,esa es la magia de la educacion virtual : )
^[\w.]+@\w+.\w+.\w+$
tengo esta expresión para encontrar correos válidos. Lo que no comprendo es por qué funciona también para correos como [email protected]
Si mi estructura es inicia en [palabra y puntos]mas de uno seguido de [ @ ], seguido de [palabra] mas de uno, seguido de [ . ], [palabra] mas de uno, y por último [palabra] más de uno.
Para encontrar email
[a-zA-Z0-9_\.]+@[a-z]+\.[a-z]+
cabe resaltar que que el caracter (.) hace match con todo excepto con los cambios de linea.
que potente
Expresiones mucho muy potentes !!
Si están usando Linux o algo similar y no pueden hacer lo que hace el profe, lo que necesitan es ponerle una bandera el comando grep. Esta bandera es -E
y ya con esto ustedes podrán hacer las cosas mágicas que hace el profe
Hola, tengo esta E.R pero no me coge los primeros números de la primera línea:
\d{2,2}[.- ]*\W
Me pueden ayudar por fa que me hace falta
creo que un buen ejemplo para el cuantificador + (que exista 1 o mas veces) es el siguiente:
encontrar las palabras que terminen con a, por ejemplo, entonces, la construcción sería:
encontrame cualquier cantidad ocurrencia de palabras
\w*
y que despues tengan al menos 1 a
a+
y luego tenga un caracter diferente a [a-zA-Z0-9], es decir espacios en blanco, coma, punto lo que sea usamos el NOT A WORD \W
\W
entonces quedaria:
\w*a+\W
waaaawww, 😄
plagio en Perú.
entonces el operador afecta directamente el contenido que tenga declarado a su izquierda?
Dado este dato:
8589sA
que resultado final se espera con la siguiente expresion:
\d?[a-zA-Z]s
a) 8589s
b) 8589sA
c) 9s
d) 59sA
Comenten su respuesta 😃
Lo que parece poco intuitivo y practico es encontrar 0 o 1, 0 o mas, ya que encontrar cero conceptualmente es no encontrarlo y donde se ve es cuando pone guiones entre palabras porque hay 0 digito.
El signo de interrogación ? es como un operador de disyunción ?
Brutal!!
Que potencia de clase.
El signo ? es como un operador de disyunción ?
Se empieza a ver la potencia de las expresiones regulares.
.
Solo con esto, ya puedo buscar nombres de archivos complejos con Adobe Brigde.
Mal explicada esta clase.
La implementación del primero en Java es de la siguiente forma:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
int i = 1;
String cs = "12345a\n12345\nabc\n123a456";
Pattern pattern = Pattern.compile("(\\d*)[a-z]");
Matcher matcher = pattern.matcher(cs);
boolean matchFound = matcher.find();
System.out.println("string length: " + cs.length());
if (!matchFound) System.out.println("Match not found");
while (matchFound) {
System.out.println(String.format("%d. %s", i, "match: " + matcher.group()));
System.out.println("index: " + matcher.start());
System.out.println("end index + 1: " + matcher.end());
System.out.print("\n");
matchFound = matcher.find();
i++;
}
}
}
// Output
/**
* string length: 24
* 1. match: 12345a
* index: 0
* end index + 1: 6
*
* 2. match: a
* index: 13
* end index + 1: 14
*
* 3. match: b
* index: 14
* end index + 1: 15
*
* 4. match: c
* index: 15
* end index + 1: 16
*
* 5. match: 123a
* index: 17
* end index + 1: 21
*/
Acordeon.md nos muestra el resumen de las expresiones regulares vista hasta la clase 7
Es interesante el uso de los delimitadores para usarlos en las expresiones regulares, ya lo estoy entendiendo.
wowwww se siente bien entender esto, aunque un poco intimidante jaja
import re
fh = open(r"C:\Users\Alfonso Zapata\jupyter\Cursos\Junio 2022\Curso de expresiones regulares - platzi\REGEX-master\liners.txt", "r").read()
fh
# for line in re.findall("\d", fh):
# print(line)
line = re.findall("[0-9a-fA-F]{6}", fh)
print(line)
line = re.findall("[\d*]{5}", fh)
print(line)
line = re.findall("\d*[a-z]s\d*", fh)
print(line)
* => puede ser que tenga o no tenga
+ => si o si tiene que tener.
Me costo un poco internailzar las funcionalidades de
super interesante clase, me está siendo de mucha utilidad
Hola Profe. Me gustaria preguntarte a ti, el equipo Platzi o a la comunidad, cual es la Biblia de Rgex? Cual sería una buena referencia de consulta para cuando toca sentarse a pensar y diseñar una expresión regular.
Saludos
Para los que quieran trabajar esto en la consola, aquí les dejo un articulo que habla de ello https://platzi.com/tutoriales/1301-expresiones-regulares/9434-delimitadores-en-consola-linux/
Codigo de d
/*
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
*
@author Sem-6-INGENIERIAINDU
*/
public class Strings {
/**
}
}
Resultado
Solución
(\d{2,2}[^a-z]?)+
Delimitadores
Se usan en combinación con las clases mencionadas
Delimitadores
Se usan en combinación con las clases mencionadas
Entonces que es un delimitador?
Mi solucio definitiva del reto:
^#(?:[0-9a-fA-F]{3}){1,2}$
Apuntes:
*Los delimitadores: +, , ?
Tipos básicos de conteo: que exista, que no exista.
( * ) Todo.
( + ) 1 o más.
( ? ) Cero o uno.
Respuesta a:
Los delimitadores: +, *, ?
Expresiones regulares:
\w- caracteres de palabras
\d- dígitos
\s- espacios
\t - Tabulador
. - Encuentra todo carácter
[] =rango
Cuando concateno los delimitadores +* da error, sin embargo cualquiera de estos dos combinan con ?, es decir +? o *?, de forma que el ? pierde el sentido.
Apuntes:
Ser específicos con las expresiones regulares (tener cuidado)
Expresiones regulares:
\w- caracteres de palabras
\d- digitos
\s- espacios
se ve muy interesante
Muy poderoso
Excelente.
genial
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?