Regex - позитивный взгляд без соответствия групп - PullRequest
0 голосов
/ 16 июня 2019

Возможно ли иметь позитивную группу, которая не будет добавлена ​​в финальные группы? Кажется, я не могу использовать ?: с ?= уже в группе, но я хочу просто проверить, присутствует ли группа с lookahead, но не использовать ее в конце.

Поэтому, когда я передаю некоторый текст этому регулярному выражению, я хочу проверить, соответствует ли общий шаблон (вот почему я использую положительный прогноз), но я хочу извлечь только число.

Вот примеры - https://regex101.com/r/Q7WIUo/2

-> все выше верно, я хочу найти последнее число перед магическим словом, но оно должно содержать XXX или YYY или ZZZ. Но, как вы видите, у меня совпадают 3 группы, и мне нужна только вторая - это возможно?

1 Ответ

2 голосов
/ 16 июня 2019

Вы можете использовать одну группу захвата, чтобы захватить последний номер перед magical word, поэтому вы можете опустить группу захвата в предпросмотре и группу захвата вокруг последней части (\D*):

^(?=.*\s(?:XXX|YYY|ZZZ)\s).*?(\d+(?:\.\d+)?)\D*\bmagicalword\b\D*$

Вместо использования (\d+(?:\.\d+)?) (данные вашего примера содержат только десятичные значения, разделенные точкой), вы все равно можете использовать ([0-9,.]+), но это немного широкое совпадение, поскольку оно также может захватывать ...

Пояснение

  • ^ Начало строки
  • (?=. Положительный взгляд вперед, утверждают, что справа -
    • *\s(?:XXX|YYY|ZZZ)\sВыберите один из перечисленных вариантов внутри группы без захвата
  • ) Закрыть позитивный прогноз
  • .*? Соответствует любому символу, кроме новой строки, не жадной
  • (\d+(?:\.\d+)?) Совпадение 1+ цифр с необязательной деталью для совпадения с точкой и 1+ цифр
  • \D* Совпадение 0+ раз, а не цифра
  • \bmagicalword\b Совпадение магического словамежду границами слов
  • \D* Совпадение 0+ раз, а не цифра
  • $ Конец строки

Regex demo

Если строка также может начинаться с XXX YYY или ZZZ, вы можете изменить первое \sв слове граница

(?=.*\b(?:XXX|YYY|ZZZ)\s

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