Captura de múltiples grupos citados en Go
Este artículo aborda el desafío de analizar cadenas que siguen un formato específico: un comando en mayúscula seguido de un opcional argumentos citados. El objetivo es extraer tanto el comando como los argumentos como cadenas separadas.
Para manejar esta tarea, se emplea una expresión regular: re1, _ := regexp.Compile(([A-Z] )(?: " (1 )")*). El primer grupo de captura ([A-Z] ) coincide con el comando en mayúsculas, mientras que el segundo grupo de captura (?: "([^"] )")* coincide con cero o más argumentos citados.
Sin embargo, el código proporcionado captura solo el último argumento. Para resolver este problema, se sugiere una expresión regular más relajada: re1, _ := regexp.Compile(([A-Z] )|(?: "(1 )")). Esta expresión regular utiliza una unión | para permitir un comando o un argumento.
Modificando el código a:
re1, _ := regexp.Compile(`([A-Z] )|(?: "([^"] )")`)
results := re1.FindAllStringSubmatch(`COMMAND "arg1" "arg2" "arg3"`, -1)
fmt.Println("Command:", results[0][1])
for _, arg := range results[1:] {
fmt.Println("Arg:", arg[2])
}
todos los argumentos ahora se pueden capturar correctamente. Esta expresión regular revisada es más versátil y admite variaciones en el formato de entrada donde los comandos y argumentos pueden aparecer en diferentes órdenes.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3