Регулярное выражение отрицательного просмотра вперед ограничено точным количеством символов - PullRequest
0 голосов
/ 06 августа 2020

Как я могу ограничить RegEx отрицательного просмотра вперед точным числом символов?

Например, это предложение должно быть отклонено ...

This car is not that fast!

в то время как это должно быть разрешено ...

The car you are about to see may not be that fast, but it's very beautiful!

RegEx должно соответствовать любому предложению, содержащему слово 'car', за исключением тех, которые включают слово 'not' в следующие 10 символов. Это случай первого предложения, где между словами «машина» и «не» всего 4 символа. Таким образом, это предложение следует отклонить.

Однако второе предложение содержит более 10 символов между словами «автомобиль» и «не», поэтому оно должно передавать отрицательное утверждение RegEx.

По сути, то, что я ищу, - это регулярное выражение с отрицательным просмотром вперед, которое ограничено определенным количеством символов.

Ответы [ 2 ]

1 голос
/ 06 августа 2020

Действительно, вы можете использовать отрицательный прогноз:

.*?car(?!.{0,10}not).*

Если "автомобиль" и "не" в этом правиле должны быть отдельными слова, а не только подстроки любой последовательности, затем добавьте соответствующие \b:

.*?\bcar\b(?!.{0,10}\bnot\b).*

0 голосов
/ 06 августа 2020

Утверждение отрицательного просмотра вперед, https://regex101.com/r/mD9JeR/11:

.*?car(?![\w\s]{0,10}not).*

проверяет, были ли символы \ w \ s 0-10 раз до этого. Если это так, то он не будет совпадать.

Утверждение положительного просмотра вперед, точно так же, как FYI - https://regex101.com/r/mD9JeR/12

.*?car(?=[\w\s]{10,}not).*
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...