Capturando vários grupos citados em Go
Este artigo aborda o desafio de analisar strings que seguem um formato específico: um comando maiúsculo seguido por opcional argumentos citados. O objetivo é extrair o comando e os argumentos como strings separadas.
Para lidar com esta tarefa, uma expressão regular é empregada: re1, _ := regexp.Compile(([A-Z] )(?: " (1 )")*). O primeiro grupo de captura ([A-Z] ) corresponde ao comando em maiúsculas, enquanto o segundo grupo de captura (?: "([^"] )")* corresponde a zero ou mais argumentos entre aspas.
No entanto, o código fornecido captura apenas o último argumento. Para resolver esse problema, é sugerido um regex mais relaxado: re1, _ := regexp.Compile(([A-Z] )|(?: "(1 )")). Este regex usa uma união | para permitir um comando ou um argumento.
Modificando o código para:
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 os argumentos agora podem ser capturados com sucesso. Esta regex revisada é mais versátil, acomodando variações no formato de entrada onde comandos e argumentos podem ocorrer em ordens diferentes.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3