Grupos de captura para transformar CSV a SQL

Clase 19 de 29Curso de Expresiones Regulares

Resumen

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.

  • Validan estructura: longitudes, prefijos, rangos simples, patrones repetidos.
  • No validan semántica: rangos geográficos correctos o reglas de negocio complejas.
  • Asigna responsabilidades: regex para el patrón; el lenguaje o script para las reglas y la lógica.

Idea clave: no busques que las regex solucionen todo. Úsalas donde brillan: detección y extracción rápida de patrones.

¿Cómo estructurar el patrón para extraer título y año?

El archivo tiene un formato constante y explota muy bien con regex. Esto permite separar campos con precisión y preparar la transformación de datos.

¿Qué formato tiene cada línea?

  • Un id numérico incremental.
  • Separador :: entre campos.
  • Un título, un espacio, y el año entre paréntesis: Título (1995).
  • Otro :: y una lista de categorías separadas por pipes |.

Ejemplo conceptual: id::Título (Año)::Categoría1|Categoría2.

¿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:
insert into 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.

      Grupos de captura para transformar CSV a SQL