0Pricing
Swift Academy · Lección

Grupos de captura

Extraiga subcadenas de las coincidencias.

Grupos de captura es una lección gratuita de Swift Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Swift Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Swift Academy incluye 4 lecciones en total.

Grupos de captura

Los paréntesis de una regex crean grupos de captura. Cada grupo conserva la subcadena con la que coincidió, para que pueda extraer partes estructuradas de una coincidencia más grande.

Una sola captura

Al encerrar parte de un patrón entre (), se captura esa parte. El resultado de la coincidencia se convierte en una tupla: primero la coincidencia completa y después cada captura.

if let m = "v2".firstMatch(of: /v(\d+)/) {
    print("Whole: \(m.0)")
    print("Group: \(m.1)")
}

Varias capturas

Cada par de paréntesis añade otro elemento a la tupla de salida, en orden de izquierda a derecha.

if let m = "2024-05-30".wholeMatch(of: /(\d{4})-(\d{2})-(\d{2})/) {
    print("Year: \(m.1)")
    print("Month: \(m.2)")
    print("Day: \(m.3)")
}

La coincidencia completa es .0

El elemento .0 de la salida siempre es el texto completo coincidente. Las capturas comienzan en .1.

if let m = "key=value".wholeMatch(of: /(\w+)=(\w+)/) {
    print("Full: \(m.0)")
    print("Key: \(m.1), Value: \(m.2)")
}

Las capturas son subcadenas

De forma predeterminada, las capturas son valores Substring que apuntan a la cadena original. Conviértalas mediante String(...) si necesita conservarlas.

if let m = "abc123".firstMatch(of: /([a-z]+)(\d+)/) {
    let letters = String(m.1)
    let numbers = String(m.2)
    print(letters, numbers)
}

Capturas opcionales

Si un grupo es opcional (seguido de ?), su captura puede ser nil cuando no participa en la coincidencia.

if let m = "color".wholeMatch(of: /colou?(r)/) {
    print("Captured: \(m.1)")
}

Capturas con nombre

Puede asignar un nombre a un grupo mediante (?<name>...) y leerlo a través de la salida con nombre, que resulta más clara que los índices numéricos.

let re = /(?<area>\d{3})-(?<line>\d{4})/
if let m = "555-1234".wholeMatch(of: re) {
    print("Area: \(m.area)")
    print("Line: \(m.line)")
}

Iterar sobre capturas

Combine las capturas con matches(of:) para extraer datos estructurados de muchas coincidencias a la vez.

let log = "a=1 b=2 c=3"
for m in log.matches(of: /(\w+)=(\d+)/) {
    print("\(m.1) -> \(m.2)")
}

Grupos anidados

Los grupos pueden anidarse. El grupo externo captura el conjunto completo y los grupos internos capturan sus partes. La numeración sigue el orden de apertura de los paréntesis.

if let m = "12:30".wholeMatch(of: /((\d+):(\d+))/) {
    print("All: \(m.1)")
    print("H: \(m.2), M: \(m.3)")
}

Grupos sin captura

Utilice (?:...) para agrupar sin capturar, cuando solo necesite agrupar para aplicar un cuantificador y no quiera un elemento adicional en la tupla.

if let m = "abab".wholeMatch(of: /(?:ab)+/) {
    print("Matched: \(m.0)")
}

Crear un analizador

Las capturas convierten texto sin procesar en valores tipados. Aquí analizamos una cadena de coordenadas para convertirla en enteros.

func parsePoint(_ s: String) -> (Int, Int)? {
    guard let m = s.wholeMatch(of: /(\d+),(\d+)/),
          let x = Int(m.1), let y = Int(m.2) else { return nil }
    return (x, y)
}
print(parsePoint("3,7") ?? "nil")

Comprobación rápida

Para el patrón /(\d{4})-(\d{2})/, que coincide con "2024-05", ¿qué valor tiene m.2?

Resumen

Los paréntesis crean grupos de captura accesibles como una tupla, donde .0 es la coincidencia completa y .1, .2... son las capturas. Ha visto grupos con nombre, opcionales, anidados y sin captura. A continuación, creará regex a partir de código Swift legible con RegexBuilder.

Preguntas frecuentes

¿La lección «Grupos de captura» es gratis?

Sí — el texto completo de «Grupos de captura» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Swift Academy, actualiza a CoddyKit PRO. El curso de Swift Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Grupos de captura»?

Extraiga subcadenas de las coincidencias. Practicas Swift Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Swift Academy?

No se requiere experiencia previa. Swift Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Grupos de captura»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Swift Academy?

Sí. Cada lección de Swift Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Literales regex y coincidencias
  2. Grupos de captura
  3. DSL RegexBuilder
  4. Reemplazar y dividir texto
← Volver a Swift Academy