/ / Група групових збірних команд Java regex порожня, хоча вона відповідає - java, regex

Група збігів Java у регулярному виразі порожня, навіть якщо вона відповідає - java, regex

Припустимо, я отримав цей рядок:

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

І хочете узгодити дві наступні частини:

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

16AJ може використовуватися як "точка розриву", тому будь-що, починаючи з першої літери після цифри до "точки перерви", повинна відповідати групі.

Я отримав це якось, працюючи з цим регулярним виразом ^|([0-9])+(.)+(?=s+16AJ) але моя перша група містить 8 символів, а друга моя група не містить нічого.

Подивіться це демонстрація

Що я тут пропускаю? Чому моя друга група порожня?

Відповіді:

3 для відповіді № 1
^|([0-9])+(.+)(?=s+16AJ)

^^

Вам потрібно взяти кількісний показник всередині групи захоплення.


1 для відповіді № 2

Ви можете використовувати цей регулярний вираз:

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

На Java:

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

Реєкс Демо

Це дасть вам 125148 у першій групі та Schalter f GLE GÜ 90/80Z nei PL 80 16AJ у 2-й групі.


1 для відповіді № 3

Друга група не пуста. Ви захоплюєте 8 у першій групі та 0 по-друге, саме цього я б і очікував від цієї виразки. Потрібно поставити квантори всередині групи захоплення. Як ви це робите, ви захоплюєте по одному символу, кожен раз перезаписуючи раніше захоплений символ.

Я думаю, що це ви намагаєтеся:

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