Прекратить захват после "n" полных остановок - PullRequest
0 голосов
/ 29 апреля 2019

Мне нужно регулярное выражение, которое может захватывать до заданного числа полной остановки после определенного слова.

Рассмотрим этот текст:

Переполнение стека

Это отличный сайт. Это работает очень хорошо. Многие люди помогают каждому Другой.

Мне это нравится.

Я хочу, чтобы мое регулярное выражение прекратило захват после того, как оно встретило 2/3/4 (в зависимости от моих потребностей в различных сценариях) полных остановок после слова Переполнение стека .

My Regex захватывает столько, сколько может получить:

p = r'((\bStack Overflow\b)\s*.*(?=\.))'
lst = re.findall(p, text, re.I|re.M|re.DOTALL)

Если я сделаю его нежадным и использую регулярное выражение, как показано ниже. Останавливается на 1-й полной остановке.

p = r'((\bStack Overflow\b)\s*.*?(?=\.))'

Я знаю, что должен где-то использовать {2}, но не могу понять.

1 Ответ

2 голосов
/ 29 апреля 2019

Повтор группы, которая соответствует непериодическим символам, за которыми следует символ точки. Количество повторений этой группы будет числом периодов после Stack Overflow, которые сопоставляются. Например:

\bStack Overflow\b(?:[^\.]*\.){2}

будет соответствовать 2 предложениям (или просто периодам) после переполнения.

https://regex101.com/r/KYoVjE/1

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