"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como capturar vários grupos repetidos em expressões regulares no Go?

Como capturar vários grupos repetidos em expressões regulares no Go?

Publicado em 2024-11-02
Navegar:879

How to Capture Multiple Repeating Groups in Regular Expressions in Go?

Capturando grupos repetidos no Go

Ao trabalhar com strings que seguem um padrão específico, capturar grupos repetidos pode ser uma tarefa comum. Em Go, expressões regulares são uma ferramenta poderosa para esse propósito.

Considere o seguinte problema: Analisar strings compostas por uma palavra maiúscula seguida por zero ou mais argumentos entre aspas duplas. O objetivo é extrair o comando (palavra maiúscula) e os argumentos (strings entre aspas).

Regex Pitfalls

Um erro comum é usar uma expressão regular como:

re1, _ := regexp.Compile(`([A-Z] )(?: "([^"] )")*`)

Este regex captura apenas o último argumento da string. Modifique a expressão para permitir a captura de vários grupos de argumentos:

re1, _ := regexp.Compile(`([A-Z] )|(?: "([^"] )")`)

Capturando comandos e argumentos

Agora, para extrair o comando e os argumentos, empregue a função FindAllStringSubmatch com uma expressão regular adequadamente modificada:

results := re1.FindAllStringSubmatch(`COPY "filename one" "filename two"`, -1)

Estes grupos de captura de regex são:

  • Grupo 1: O comando (palavra maiúscula)
  • Grupo 2: Cada argumento (string entre aspas duplas)

Iterando sobre resultados

Finalmente, para iterar sobre os resultados e separe o comando dos argumentos:

fmt.Println("Command:", results[0][1])
for _, arg := range results[1:] {
    fmt.Println("Arg:", arg[2])
}

Ao resolver as deficiências das expressões regulares, você pode capturar grupos recorrentes com eficácia em seu código Go.

Tutorial mais recente Mais>

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