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
MustCompilea nivel de paquete, para patrones que controlas.FindStringSubmatchdevuelve la coincidencia completa y luego los grupos.SubexpIndexencuentra un grupo con nombre sin contar.
Palabras clave y builtins usados aquí
boolforfunciflenmakemaprangereturnstringvar
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.
Paso 5 de 5 en Colecciones y texto; paso 13 de 26 en Biblioteca estándar y estructura del proyecto.