Соответствующая строка не содержит подстроки с регулярным выражением
Хорошо, я знаю, что это часто задаваемый вопрос, но мне не удалось получить то, что я хотел.
Я ищу регулярное выражение, чтобы найти шаблон, который не содержит конкретной подстроки.
Я хочу найти URL, который не содержит b
параметр.
http://www.website.com/a=789&c=146 > MATCH
http://www.website.com/a=789&b=412&c=146 > NOT MATCH
В настоящее время у меня есть следующее регулярное выражение:\bhttp:\/\/www\.website\.com\/((?!b=[0-9]+).)*\b
Но я не прав с \b
регулярное выражение соответствует началу й строки и останавливается, когда оно находит b=
вместо того, чтобы не соответствовать.
Смотрите: http://regex101.com/r/fN3zU5/3
Может кто-то помочь мне, пожалуйста?
6 ответов
Просто используйте заголовок, чтобы проверить, что после URL должен быть пробел или конец строки.
\bhttp:\/\/www\.website\.com\/(?:(?!b=[0-9]+).)*?\b(?= |$)
Использовать этот:
^http:\/\/www\.website\.com\/((?!b=[0-9]+)).*$
\ b соответствует только окончанию слова.
^ соответствует началу и концу строки
и вам даже не нужно делать это так сложно, если вы не хотите URL с b
параметр использовать это:
^http:\/\/www\.website\.com\/(?!b).*$
Демо здесь: http://regex101.com/r/fN3zU5/5
Вы посмотрели на эту возможность:
http://regex101.com/r/fN3zU5/6
^http:\/\/www\.website\.com\/[ac\=\d&]*$
разрешить только &,=,a,c и цифры завершить URL в группе, и не должно быть параметра "b="
если у вас есть больше опций, и вы не хотите перечислять их все: вы не допускаете, чтобы 'b' было частью ваших параметров
^http:\/\/www\.website\.com\/[^b]*$
http://regex101.com/r/fN3zU5/7
^http:\/\/www\.website\.com\/(?!.*?b=.*?).*$
здесь тоже работает, "b=" разрешен в любой позиции строки параметра, так что вы даже можете иметь строку "b" в качестве значения параметра.
import re
pattern=re.compile(r"(?!.*?b=.*).*")
print pattern.match(x)
Это будет смотреть вперед, если присутствует "b=". Отрицательный прогноз означает, что он не будет соответствовать этой строке.
Это простой шаблон, не гибкий, но он работает:
http:\/\/www\.website\.com\/+a=+\w+&+c=+\w+
Это то, что вы хотите. ^http:\/\/www\.website\.com\/(([^b]=[0-9]+).)*$