Регулярное совпадение нескольких номеров останавливается на строке (слове), несмотря на то, что существует больше совпадений - PullRequest
0 голосов
/ 24 октября 2019

Цель; Совпадение всех вариантов телефонных номеров с 8 цифрами + (необязательно) код страны. Остановить совпадение, когда найдено «ключевое слово», даже если после «ключевого слова» существует больше совпадений. Нужно это в одну строчку и перепробовал множество вариаций с lookahead / behind и отрицанием [^ ключевое слово], но я не могу понять, как этого добиться.

Пример текста;

abra 90998855 kadabra 04 94 84 54 кошка 132 23 564 ой хорошая шляпа +41985 32 565 +17 98 56 32 56

Ladida

ключевое слово

Я хочу, чтобы это прекратило совпадение здесь или прямо перед «ключевым словом»

более приятный текст с некоторыми совпадениями cat 132 23 564 О, хорошая шляпа +41985 32 565 +17 98 5632 56

Пример регулярного выражения;

(\+\d{1,2})?[\s]?\(?\d{2,3}\)?[\s]?(\d{2})[\s]?(\d{2})?[\s]?(\d{2,3})

-> Это соответствует всем числам также под ключевым словом

(\+\d{1,2})?[\s]?\(?\d{2,3}\)?[\s]?(\d{2})[\s]?(\d{2})?[\s]?(\d{2,3})[^keyword]

-> Это соответствуетвсе числа также под ключевым словом

(\+\d{1,2})?[\s]?\(?\d{2,3}\)?[\s]?(\d{2})[\s]?(\d{2})?[\s]?(\d{2,3})(?!keyword)

-> Это соответствует всем числам также под ключевым словом

(\+\d{1,2})?[\s]?\(?\d{2,3}\)?[\s]?(\d{2})[\s]?(\d{2})?[\s]?(\d{2,3})(?=keyword)

-> Это ничего не соответствует

((\+\d{1,2})?[\s]?\(?\d{2,3}\)?[\s]?(\d{2})[\s]?(\d{2})?[\s]?(\d{2,3})(?:(?!keyword))*)

->Это соответствует всем числам также под ключевым словом

...