Отрицательный прогноз не соответствует суффиксу - PullRequest
0 голосов
/ 28 мая 2020

У меня есть выражение, которое соответствует чему-то, но я пытаюсь сделать так, чтобы оно не совпадало, если за ним следует суффикс: один или несколько пробелов, три дефиса, один или несколько пробелов, одна или несколько цифр, sla sh и, наконец, одна или несколько цифр. Вот выражение:

(?<=(^|\s+))[A-Z]+[ ]+([0-9]+(\.[0-9]{1,3})?)/([0-9]+(\.[0-9]{1,3})?)(?!(\s+\-\-\-\s+[0-9]+/[0-9]+))

А вот текст:

January        10.5/13.5   ---     22/26     --- 

Он соответствует 10.5 / 13 января, но я не хочу, чтобы он совпадал ни с чем.

1 Ответ

1 голос
/ 28 мая 2020

Поскольку поддерживается поиск назад, вы можете изменить положительный просмотр назад в начале на отрицательный, установив границу пробела слева (?<!\S)

Вы можете использовать .* для сканирования всей строки , вместо того, чтобы начинать с 1+ дополнительных пробелов \s+

Отрицательный просмотр вперед (?!.*\s-{3}\s+[0-9]+/[0-9] утверждает, что то, что справа, не является суффиксом.

Вы можете опустить квантификатор + после последнего класса символов, так как не имеет значения, идет ли за ним 1 или более цифр ... если это не di git.

Обратите внимание, что в текущем шаблоне десятичная part - это необязательная группа захвата 2. Если вы хотите, чтобы все это значение было в группе 1, вы можете сделать его необязательной группой .

(?<!\S)[A-Z]+[ ]+([0-9]+(\.[0-9]{1,3})?)/([0-9]+(\.[0-9]{1,3})?)(?!.*\s-{3}\s+[0-9]+/[0-9])

Regex demo

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