"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Cómo capturar varios grupos cotizados en Go: una solución Regex

Cómo capturar varios grupos cotizados en Go: una solución Regex

Publicado el 2024-11-07
Navegar:229

How to Capture Multiple Quoted Groups in Go: A Regex Solution

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.


  1. "
Último tutorial Más>

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