Регулярное выражение для совпадения с несколькими вхождениями, если встречается другая строка - PullRequest
6 голосов
/ 04 июня 2019

Я действительно надеюсь, что это может быть решено в регулярном выражении, но я не боюсь ....

Я ищу регулярное выражение, которое вернет несколько совпадений термина ТОЛЬКО, если другой термин появляется вта же строка.Это лучше объяснить на примере.Рассмотрим:

The numbers are 144, 424, and 345. Not 45.

Я бы хотел сопоставить только «144», «424» и «345».(Любое трехзначное число) - но только , если они где-то раньше следуют термину ' числа '.Таким образом, следующий дополнительный пример:

The numbers we are looking for: 234 & 992

Должен возвращать только '234' и '992.'

Следующее предложение не должно совпадать с чем-либо:

Some examples: 234, 244 and 12

Iмне показалось, что я перешел к следующему регулярному выражению:

(?<=numbers\b)(?:.|\n)*?\b(\d{3})\b

Но это соответствует только первому числу.Что я пытаюсь достичь, даже возможно?Кажется, здесь не работает ни взгляд, ни взгляд назад.По разным причинам я ограничен только одним выражением регулярного выражения, и у меня нет возможности выборочного доступа к отдельным группам захвата после факта.Итак, ищем метод регулярных выражений!

1 Ответ

4 голосов
/ 05 июня 2019

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

(?:\bnumbers\b|(?!^)\G).*?\b(\d{3})\b

Демонстрация RegEx

  • \G утверждает позицию в конце предыдущегосовпадение или начало строки для первого совпадения.
  • (?!^) позволяет избежать совпадения \G в начале строки
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...