/ / Java regex corresponde ao grupo vazio, mesmo que corresponda - java, regex

Java regex match group vazio mesmo que corresponda - java, regex

Vamos assumir que eu tenho essa linha:

|125148 Schalter f GLE GÜ 90/80Z nei PL 80 16AJ

E deseja combinar as duas partes a seguir:

  • 125148
  • Schalter para GLE GÜ 90 / 80Z nei PL 80

16AJ pode ser usado como "ponto de interrupção", para que qualquer coisa, desde a primeira letra após o número até o "ponto de interrupção", corresponda a um grupo.

Eu consegui isso de alguma forma trabalhando com este regex ^|([0-9])+(.)+(?=s+16AJ) mas meu primeiro grupo contém 8 caracteres e meu segundo grupo não contém nada.

Veja isso demonstração

O que estou perdendo aqui? Por que meu segundo grupo está vazio?

Respostas:

3 para resposta № 1
^|([0-9])+(.+)(?=s+16AJ)

^^

Você precisa levar o quantificador para dentro do grupo de captura.


1 para resposta № 2

Você pode usar este regex:

^|([0-9]+)s+(.+?16AJ)

Em Java:

^\|([0-9]+)s+(.+?16AJ)

RegEx Demo

Isso vai te dar 125148 no primeiro grupo e Schalter f GLE GÜ 90/80Z nei PL 80 16AJ no 2º grupo.


1 para resposta № 3

O segundo grupo não está vazio. Você está capturando 8 no primeiro grupo e 0 no segundo, que é exatamente o que eu esperaria desse regex. Você precisa colocar os quantificadores dentro os grupos de captura. Do jeito que você está fazendo isso, você captura um caractere de cada vez, substituindo o caractere capturado anteriormente.

Eu acho que é isso que você está tentando:

^|([0-9]+)s+(.+?)s+16AJ