Cuantificadores regex: *, + y ? en acción

Clase 7 de 29Curso de Expresiones Regulares

Resumen

Aprende a construir expresiones regulares con seguridad y velocidad: desde clases de caracteres hasta cuantificadores esenciales. Aquí tienes un acordeón tipo cheat sheet (chuleta) que resume lo importante y cómo combinarlo para búsquedas y find/replace potentes.

¿Qué son las clases de caracteres y rangos en regex?

Las clases y rangos definen qué tipo de carácter se puede emparejar. Entenderlas evita pruebas al azar y hace tus patrones confiables.

¿Qué incluye cada clase de caracteres?

  • \w: clase de “word”. Letras, dígitos y guion bajo. Viene de word.
  • \d: dígitos. Equivale a [0-9].
  • \s: espacios en blanco. Espacio, tab y caracteres invisibles.
  • . (punto): cualquier carácter. Muy potente para “todo”.
  • Guion bajo (_): parte de la clase de palabra.

¿Cómo se escriben los rangos?

  • Rango de dígitos: [0-9].
  • Rango de letras: [A-Z].
\w \d == [0-9] \s . [0-9] [A-Z]

¿Cómo funcionan los cuantificadores greedy en regex?

Los cuantificadores dicen “cuántos” caracteres deben aparecer. Por defecto son greedy: van por todo lo posible.

¿Qué hace cada cuantificador?

  • *: cero o muchos. Greedy: toma todo lo que pueda.
  • +: uno o más. Agrupa secuencias completas.
  • ?: cero o uno. Opcional, exacto.
.* # cualquier cosa, todo. \d+ # uno o más dígitos. \d* # cero o más dígitos. [A-Z]? # cero o una letra mayúscula.
  • Con .* el match abarca líneas completas si es posible. Línea a línea, un solo match.
  • Con \d+, “123” es un solo match, no “1”, “2”, “3” separados.
  • Con \d*, también empareja “vacío” donde no hay dígitos.
  • El símbolo de interrogación tiene doble uso en regex: opcionalidad (cero o uno) y modo lazy. Lo segundo se verá más adelante.

¿Cómo combinar clases y cuantificadores para find/replace eficaces?

La fuerza está en mezclar clases con cantidades. Así defines patrones compactos que emparejan justo lo que necesitas y nada más.

¿Cómo exigir u opcionalizar partes del patrón?

  • Parte obligatoria: carácter sin cuantificador. Ejemplo: la S al final debe estar.
  • Parte opcional (cero o uno): ?.
  • Parte repetible: * (cero o muchas) o + (una o más).
\d*[A-Z]?S
  • \d*: puede haber dígitos o no antes.
  • [A-Z]?: puede haber una letra (o no) después.
  • S: obligatoria. No tiene cuantificador.

Variaciones útiles:

  • \d+[A-Z]?S: debe haber al menos un dígito antes de la S.
  • \d*[A-Z]S: debe haber una letra antes de la S (no opcional).

¿Qué pasa al reemplazar con replace all?

  • Sustituir con un guion “-” revela cuántos matches reales hubo.
  • Con .*, cada línea suele volverse un solo “-” porque el match cubre todo.
  • Pueden aparecer más reemplazos de los vistos: hay caracteres invisibles (como espacios o tabs) que también emparejan.
find: \d+ replace: - acción: replace all resultado: todas las secuencias numéricas sustituidas por “-”.

Tips prácticos:

  • Si el case no coincide, ajusta tu búsqueda según convenga.
  • El punto . con * es potente pero amplio: úsalo con intención.
  • Piensa primero en lenguaje natural: “cero o muchos”, “uno o más”, “cero o uno”. Luego tradúcelo a *, +, ?.

¿Te quedó alguna duda puntual o quieres proponer un patrón real de tu trabajo para pulirlo juntos? Deja tu comentario y lo resolvemos paso a paso.