Reg Ex не найдет совпадения с предыдущим пробелом - PullRequest
0 голосов
/ 21 апреля 2020

Я пытаюсь получить поля, которые либо разбиты, либо иногда числами (это из упакованного календаря). Он не будет захватывать группу, если число следует за --. Это регулярное выражение, которое я использую:

(-{2}\s|\s[0-9]{1,2}\s|\s[0-9]{1,2}){7}

Это мой ввод:

 Base : DEN CA01FO01 99 -- -- -- -- -- -- 

 -- -- -- -- -- -- -- 

 -- 11 -- -- -- -- -- 

 11 11 11 11 11 11 --

TU 5368 DEN-BIL 0750 0922 132 136 30 RJU -- -- -- -- -- -- --

Вот результаты .

Он должен был схватить группу -- 11 -- -- -- -- --, но это не так. Это почти как если бы он соответствовал --\s, что он использовал это \s и не будет соответствовать \s11.

Ответы [ 2 ]

0 голосов
/ 21 апреля 2020

Вы можете упростить свое регулярное выражение до:

(\s(--|\d{1,2})){7}

и получите желаемый результат:

 99 -- -- -- -- -- --
 -- -- -- -- -- -- --
 -- 11 -- -- -- -- --
 11 11 11 11 11 11 --
 -- -- -- -- -- -- --

Regex Demo

0 голосов
/ 21 апреля 2020

Если вы хотите сопоставить 7 раз либо 1, либо 2 цифры, либо 2 тире, которые также могут состоять только из цифр или только пар тире, вы можете использовать чередование и обходные пути (если они поддерживаются).

Сначала сопоставьте либо 1-2 цифры, либо --. Затем повторите 6 раз, совпадая с символом пробела, после чего укажите 1-2 цифры или --

(?<!\S)(?:[0-9]{1,2}|--)(?:\s(?:[0-9]{1,2}|--)){6}(?!\S)

Regex demo

Если lookaronds не поддерживаются, вы можете использовать группу захвата:

(?:^|\s)((?:[0-9]{1,2}|--)(?:\s(?:[0-9]{1,2}|--)){6})(?:$|\s)

Regex demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...