Como capturar vários grupos repetidos?

Eu preciso capturar vários grupos do mesmo padrão. Suponha que eu tenha uma string a seguir:

HELLO,THERE,WORLD 

E eu escrevi um padrão a seguir

 ^(?:([AZ]+),?)+$ 

O que eu quero fazer é capturar cada palavra, então o grupo 1 é: “HELLO”, o grupo 2 é “THERE” e o grupo 3 é “WORLD” O que meu regex está capturando apenas o último, que é ” MUNDO”.

Estou testando minha expressão regular aqui e quero usá-la com o Swift (talvez haja uma maneira no Swift de obter resultados intermediários de alguma forma, para que eu possa usá-los?)

UPDATE: Eu não quero usar split . Eu só preciso agora capturar todos os grupos que corresponderam ao padrão, não apenas o último.

Com um grupo no padrão, você só pode obter um resultado exato nesse grupo. Se o seu grupo de captura for repetido pelo padrão (você usou o quantificador + no grupo circundante que não captura), somente o último valor correspondente será armazenado.

Você tem que usar as funções de implementação de regex da sua linguagem para encontrar todas as correspondências de um padrão, então você teria que remover as âncoras e o quantificador do grupo de não captura (e você poderia omitir o próprio grupo de não captura).

Como alternativa, expanda seu regex e deixe o padrão conter um grupo de captura por grupo que você deseja obter no resultado:

 ^([AZ]+),([AZ]+),([AZ]+)$ 

Apenas para fornecer um exemplo adicional do parágrafo 2 da resposta. Não tenho certeza de como é importante para você obter três grupos em uma partida, em vez de três correspondências usando um grupo. Por exemplo, no groovy:

 def subject = "HELLO,THERE,WORLD" def pat = "([AZ]+)" def m = (subject =~ pat) m.eachWithIndex{ g,i -> println "Match #$i: ${g[1]}" } Match #0: HELLO Match #1: THERE Match #2: WORLD 
    Intereting Posts