/ Grupa dopasowania wyrażeń regularnych / Java jest pusta, mimo że pasuje - java, regex

Grupa dopasowania regex Java jest pusta, mimo że pasuje - java, regex

Załóżmy, że mam następującą linię:

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

I chcę dopasować następujące dwie części:

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

16AJ może być użyte jako „punkt przerwania”, więc wszystko od pierwszej litery po numerze aż do „punktu przerwania” powinno być dopasowane w grupie.

Mam to jakoś działające z tym wyrażeniem regularnym ^|([0-9])+(.)+(?=s+16AJ) ale moja pierwsza grupa zawiera 8 znaków, a moja druga grupa nie zawiera niczego.

Zobacz próbny

Czego tu brakuje? Dlaczego moja druga grupa jest pusta?

Odpowiedzi:

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

^^

Musisz wziąć kwantyfikator do grupy przechwytywania.


1 dla odpowiedzi nr 2

Możesz użyć tego wyrażenia regularnego:

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

W języku Java:

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

RegEx Demo

To da ci 125148 w pierwszej grupie i Schalter f GLE GÜ 90/80Z nei PL 80 16AJ w 2. grupie.


1 dla odpowiedzi nr 3

Druga grupa nie jest pusta. Przechwytujesz 8 w pierwszej grupie i 0 w drugim, dokładnie tego oczekiwałbym od tego wyrażenia regularnego. Musisz umieścić kwantyfikatory wewnątrz grupy przechwytujące. Sposób, w jaki to robisz, polega na przechwytywaniu jednej postaci na raz, za każdym razem nadpisując poprzednio przechwyconą postać.

Myślę, że tego właśnie próbujesz:

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