Регулярное выражение, которое не содержит подстроку после некоторой точки - PullRequest
0 голосов
/ 27 сентября 2019

Я хочу регулярное выражение, которое не соответствует строке, если содержит слово page, и соответствие, если оно не содержит.

^https?.+/(event|news)/.+(?!page).+$ это регулярное выражение, которое я сейчас использую, поэтому яхотите, чтобы он не совпадал с, например, https://www.foosite.com/news/foopath/page/10, но это так.Где я допустил ошибку?

Двойные выражения .+ должны означать, что вокруг строки page должна быть какая-то строка, а (?!page) должна означать, что не должно быть строки, такой как pageмежду ними.Что не так с этим выражением?Спасибо, и извините за плохую грамматику.

Ответы [ 3 ]

1 голос
/ 27 сентября 2019

Возможно, вы ищете

^https?.+/(event|news)/(?:(?!page).)+$

См. демонстрацию на regex101.com .

1 голос
/ 27 сентября 2019

Ваша проблема в том, что .+(?!page).+ будет соответствовать foopath/page/10, потому что первое .+ совпадение может закончиться в 1 в 10, а второе может совпадать до $.Вместо этого просто подтвердите, что после (event|news)/ нет комбинации символов и слова page:

^https?.+/(event|news)/(?!.*page)

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

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

^https?.+/(event|news)/(?!.*page).*$

Демонстрация по регулярному выражению regex101

0 голосов
/ 27 сентября 2019

Соответствие обычно в регулярном выражении намного проще, чем , исключая .

Я бы предпочел сопоставить ваши исключенные слова и инвертировать логику наif-предложение.

if(!re.match(...

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