Перевернуть матч с Regexp [Duplicate
Вопрос
Этот вопрос уже имеет ответ здесь:
С PCRE, как вы можете построить выражение, которое будет соответствовать только в случае строки нет найденный.
Если бы я использовал grep (которого я не имею), я бы хотел опцию -v.
Более конкретный пример: я хочу, чтобы моя regexp соответствовала строке IFF foo
является нет в строке. Так что это будет соответствовать bar
будет, но нет foobar
.
Решение
Хорошо, я усовершенствовал свое регулярное выражение на основе решения, которое вы придумали (которое ошибочно соответствует строкам, которые начинаются с «теста»).
^((?!foo).)*$
Это регулярное выражение будет соответствовать только строкам, которые не содержат Foo. Первый Lookahead отрицает струны, начиная с «Foo», а второй убедится, что Foo не найден в другом месте в струне.
Другие советы
Основываясь на ответе Даниэля, я думаю, что у меня есть что -то, что работает:
^(.(?!test))*$
Ключ в том, что вам нужно сделать негативное утверждение на каждом символе в строке
Я уже ответил на этот вопрос для кого -то, посмотрите эти ссылки:
Это действительно почти дубликат. Я думаю, что вы ищете репутацию
(?! Foo).*
Создайте выражение, которое соответствует, и используйте! Match () ... (логическое отрицание), это, вероятно, то, как Grep делает все равно ...
Вы также можете сделать это (в Python), используя re.split
, и расщепление на основе вашего регулярного выражения, тем самым возвращая все части, которые не соответствуют регуляции, Разделение на основе того, что не соответствует регуляре