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