typestar

Expresiones regulares en Go

Compila una vez y reutiliza; los grupos con nombre hacen legible la coincidencia.

var logLine = regexp.MustCompile(
    `^(?P<level>[A-Z]+)\s+(?P<logger>[\w.]+):\s+(?P<message>.*)$`)

func parseLine(line string) (map[string]string, bool) {
    match := logLine.FindStringSubmatch(line)
    if match == nil {
        return nil, false
    }
    fields := make(map[string]string, len(match)-1)
    for i, name := range logLine.SubexpNames() {
        if i > 0 && name != "" {
            fields[name] = match[i]
        }
    }
    return fields, true
}

func replaceAll(text string) string {
    digits := regexp.MustCompile(`\d+`)
    return digits.ReplaceAllString(text, "N")
}

Cómo funciona

  1. MustCompile a nivel de paquete, para patrones que controlas.
  2. FindStringSubmatch devuelve la coincidencia completa y luego los grupos.
  3. SubexpIndex encuentra un grupo con nombre sin contar.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
21
Caracteres a escribir
520
Tokens
123
Ritmo de tres estrellas
105 tpm

Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 70 segundos.

Escribe este fragmento

Paso 5 de 5 en Colecciones y texto; paso 13 de 26 en Biblioteca estándar y estructura del proyecto.

← Anterior Siguiente →