Las expresiones regulares pueden convertir texto caótico en datos útiles con precisión y velocidad. Aquí verás cómo extraer títulos y años de un listado de películas con separadores :: y categorías con |, agrupar con paréntesis, y convertir el resultado en SQL o JSON con reemplazos usando grupos de captura. Además, entenderás cuándo usarlas y cuándo no.
¿Por qué las expresiones regulares no lo resuelven todo?
Las regex son como una navaja suiza: siempre útil, pero no reemplaza otras herramientas. Valida la forma, no el significado. Por ejemplo, puede detectar que hay tres dígitos, pero no si esos valores caen en un rango válido; o reconocer que un teléfono empieza con 55 o 777, sin garantizar que el número exista.
¿Cómo agrupar con paréntesis y clases de caracteres?
Se usan grupos de captura para reutilizar partes del texto en reemplazos. El grupo 1 puede ser el título, y el grupo 2 el año.
Ancla de inicio y fin de línea para precisión.
Dígitos con cuantificador + para el id.
Separadores :: explícitos.
Título en una clase de caracteres que incluya letras, espacios y signos que realmente aparecen.
Año con cuatro dígitos entre paréntesis.
Lo que sigue no importa ahora: .*.
Ejemplo de patrón descrito:
^\d+::([A-Za-z0-9 ,:()'&!\-]+)\((\d{4})\)::.*$
Puntos prácticos al ajustar la clase de caracteres del título:
Agrega solo lo necesario: comas, guion medio, comillas, paréntesis, ampersand, signo de admiración.
Evita meter “todo”: podrías romper el patrón y aceptar basura.
Escapa lo que el motor requiera: paréntesis, guiones o comillas según el contexto.
Revisa “no coincidencias” como señal de casos faltantes y corrige con criterio.
¿Cómo convertir el texto a SQL o JSON con reemplazos?
Con los grupos, el reemplazo es directo: el grupo 1 se referencia como $1 y el grupo 2 como $2. Un replace all bien pensado crea salidas listas para usar.
¿Cómo generar SQL con grupos de captura?
Idea: invertir el orden y escribir primero el año.
Ejemplo de reemplazo para inserciones:
insertinto movies (year, title)values('$2','$1');
Guarda como archivo .sql y ejecútalo; podrían fallar líneas que no coincidan al 100 %, pero el lote útil queda listo.
Tip: si algo sale mal, usa control z en el editor para deshacer.
¿Cómo producir JSON rápidamente?
Con el mismo patrón, genera objetos en una línea:
{"title":"$1","year":"$2"}
Rodea con corchetes y, si quieres, aplica un beautifier para formatear.
También puedes filtrar lo que no haga match y descartarlo como basura durante una iteración.
¿Qué rendimiento y herramientas considerar?
Motores y lenguajes: en Perl, Go o Java suele ejecutarse en milisegundos; en Python puede tomar segundos; PHP es más lento pero útil.
Línea de comandos: usa GREP para búsquedas con patrones.
Edición segura: prueba, ajusta, y luego aplica replace all con posibilidad de deshacer.
Habilidades y conceptos reforzados hoy:
Clases de caracteres bien definidas para títulos con signos reales.
Grupos de captura para reutilizar $1, $2 en reemplazos.
Cuantificadores (+, *) y anclas de línea para precisión.
Escapado correcto de paréntesis y guiones.
Transformación de datos: de texto a SQL o JSON con un patrón.
Depuración por no coincidencia: busca lo que no hace match para detectar casos faltantes.
¿Tienes un patrón que quieras optimizar o un caso límite que no hace match? Compártelo en los comentarios y lo revisamos juntos.
¿Han notado que las expresiones regulares pueden ser "malas palabras" en algunos comics?
JAJAJAJAJAJAJA me encanto!
jajajajajajja ahora todo tiene sentido.
Nah, lo del reemplazo a JSON me volo la mente. Siento que se me abrio el tercer ojo.
jajajajaja
Jajajajaja, me ocurrió lo mismo.
(Como dato perturbador) :: Esta es la ultima clase que se hizo el mismo día a juzgar por la ropa que lleva Beco, entonces beco sabe, TANTO, que logró hacer 20 temas! en un solo día, mis respetos Beco
El profesor del curso de PHP es igual creo que hizo todo el curso el mismo día
Wow, que observador, no lo había notado :0
(): Agrupar las matches de alguna forma.
Esta es la clase donde creo que se empieza a ver la verdadera magia de regex. Como puede generar un archivo json o sql de esta manera. 👏
¡Exacto Kevin, la clave está en la agrupación de clases o partones y en la sustitución de las coincidencias!
… ¡es #MagiaDev!
Beco, honestamente abriste un nuevo mundo con esta forma de manipular la información, yo lo realizaba con expresiones y fórmulas en excel para poder generar las sentencias en sql. Excelente!!!
Que alivio saber que no era el raro hacia esto. jaja
Luego de conocer esta función no volveré a crear scripts desde excel con sus funciones y fórmulas!
Expresión sencilla
^\d+::(.*)\s\((\d{4})\)::.*$
Uffffff Quedo mas poderosa asi 🙇♀️
Muy buena RegEx, Solo falto un símbolo para encontrar la totalidad de las coincidencias.
<^\d+::(.*)\s?\((\d{4})\)::.*$>
Cuando por fin dominas las expresiones regulares
THE POWER!
Los paréntesis () sirven para agrupar caracteres. Tiene algunas diferencias notables a los paréntesis cuadrados.
Entre ellas se puede usar caracteres especiales conservan su significado dentro de los paréntesis.
Utilizando dentro del paréntesis una barra “|” podemos separar y hacer búsquedas similares. Ejemplo: (este|oeste|norte|sur)
Aquí se muestra un ejemplo para crear un SQL usando expresiones regulares.
Es un verdadero placer cognitivo entender esta clase, de verdad sientes como si adquirieras un nuevo súper poder.
Yeah jajaja is a good form to see it
No se si entendí bien. Según los grupos creados con los () son llamados según el símbolo de $n donde n es igual a la posición en que es invocada el grupo?
Así es, si tenemos un listado de códigos como:
ADF-012-415DBF-543-820
suponiendo que fueran miles, y quisiéramos invertir su orden y reemplazar el guión por guión bajo, podríamos utilizar una expresión como:
(\w{3})-(\d{3})-(\d{3})
y luego la expresión de reemplazo:
$3_$2_$1
obteniendo:
415_012_ADF
820_543_DBF
Nos charlamos
cabe destacar que $n es una forma de crear variables en la terminal y es una forma generalizada en la gran mayoría =)
¡Que potencia señores! ¡pero que potencia! me eeeencanta
Esto sí me voló la cabeza... Increíble tu clase Beto, muchas gracias...
Aquí dejo la expresión lógica que use para buscar en todas las líneas sin excepción...
Excelente!! Gracias... Está genial la herramienta en la que lo haces funcionar.
Tengo un problema que no he podido resolver, al completar la expresión exactamente igual que el profesor y probar con el mismo archivo me matchea la línea completa solo cuando hay más de una categoría, si hay solo una me matchea esa línea y la siguiente dentro del mismo match, ¿qué puedo estar haciendo mal?
Es dificil reconstruir con palabras tu problema. Por favor incluye aquí la expresión regular que estas utilizando, y cual seria el resultado esperado.
Perfecto, no me habia percatado de eso y no entendía por qué no me daba el match de la misma forma. Entendí el concepto de grupos y me doy cuenta el potencial que tiene, ya he avanzado y veo como usado en scripts es increiblemente poderoso. Muchas gracias!!
Si siguen este curso desde VS Code, ¡encontré una extensión buenísima! Se llama: Regexp Explain
Escriban su expresión regular, selecciónenla con el mouse, click derecho, explicar regex y verán cómo es que está funcionando. Me sirvió mucho para entender esta clase.
Respecto a $1,$2, puedo entender que hicimos un: "Conserva solamente la información del grupo 1 y del grupo 2"
Que buen vídeo, sentí que se me abrió la mente… Dejare de usar Excel para crear mis querys
Cuando en una expresion utilizamos () varias veces
el $1 corresponde a lo hallado en el primer par de parentesis
el $2 corresponde a lo hallado en el segundo par de parentesis
…y asi sucesivamente.
como se denota el match total de la linea , $0?
Para retornar el match completo puedes utilizar: $&
muchas gracias, lo probe y funciono
Buenas compañeros, al que le este agarrando dos lineas al momento de establecer los parentesis, deben hacer la expresion lazzy en el primer grupo, como se establece a continuación:
<^\d+::([\w\s,:'\.&\!\-\(\)\/\?\*\$\;\#]+?)>
Muchas gracias, funcionó
Más usos avanzados de expresiones regulares. Un curso profesional de Regex!!! Genial!!!
El uso avanzado es que el que tu le des, entendiendo las bases que se enseñan en este curso puedes hacer expresiones complejas solo es validar que los resultados sean los esperados.