Синтаксис регулярного выражения для "ничего не соответствует"?
У меня есть движок шаблонов python, который сильно использует регулярное выражение. Он использует конкатенацию как:
re.compile( regexp1 + "|" + regexp2 + "*|" + regexp3 + "+" )
Я могу изменять отдельные подстроки (regexp1, regexp2 и т. д.).
есть ли небольшое и легкое выражение, которое ничего не соответствует, которое я могу использовать внутри шаблона, где я не хочу никаких совпадений? К сожалению, иногда ' + ' или ' * ' добавляется к атому регулярного выражения, поэтому я не могу использовать пустую строку - ошибка "нечего повторять" будет расти.
7 ответов:
это не должно совпадать ни с чем:
re.compile('$^')
поэтому, если вы замените regexp1, regexp2 и regexp3 на'$^', будет невозможно найти совпадение. Если вы не используете режиме онлайн.
после некоторых тестов я нашел лучшее решение
re.compile('a^')
невозможно сопоставить и потерпит неудачу раньше, чем предыдущее решение. Вы можете заменить любой другой символ, и это всегда будет невозможно матча
(?!)
всегда не совпадают. Это нулевой ширины отрицательный просмотр вперед. Если то, что находится в скобках соответствует, то весь матч не удается. Учитывая, что в нем ничего нет, он потерпит неудачу в матче за что угодно (включая ничто).
чтобы соответствовать пустой строке - даже в многострочном режиме - вы можете использовать
\A\Z
, так:re.compile('\A\Z|\A\Z*|\A\Z+')
разница в том, что
\A
и\Z
- начало и конец строка, а^
и$
они могут соответствовать начало / конец строки, так что$^|$^*|$^+
потенциально может соответствовать строке, содержащей новые строки (если флаг включен).и чтобы не совпадать ни с чем (даже с пустой строкой), просто попытайтесь найти содержимое до начало строки, например:
re.compile('.\A|.\A*|.\A+')
так как никакие символы не могут предшествовать \A (по определению), это всегда не будет соответствовать.