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)
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