Нажмите на красный значок, который находится ниже, чтобы остановить отладку. там вы увидите окно, в котором можно удалить все точки останова.
Ничего не должно совпадать:
re.compile('$^')
Поэтому, если вы замените regexp1, regexp2 и regexp3 на '$ ^', будет невозможно найти совпадение. Если вы не используете многострочный режим.
После некоторых тестов я нашел лучшее решение
re.compile('a^')
Невозможно сопоставить и выйдет из строя раньше, чем предыдущее решение. Вы можете заменить a любым другим символом, и всегда будет невозможно сопоставить
(?!)
всегда не должно соответствовать. Это отрицательный прогноз нулевой ширины. Если то, что указано в скобках, совпадает, то все совпадение не выполняется. Учитывая, что в нем ничего нет, он не сможет найти ничего (включая ничего).
Чтобы сопоставить пустую строку - даже в многострочном режиме - вы можете использовать \ A \ Z
, поэтому:
re.compile('\A\Z|\A\Z*|\A\Z+')
Разница в том, что \ A
и \ Z
- это начало и конец строки , тогда как ^
и $
могут соответствовать началу / концу lines , поэтому $ ^ | $ ^ * | $ ^ +
потенциально может соответствовать строке, содержащей символы новой строки (если флаг включен).
И не найти ничего (даже пустого строка), просто попытайтесь найти содержимое перед началом строки, например:
re.compile('.\A|.\A*|.\A+')
Поскольку символы не могут стоять перед \ A (по определению), совпадение всегда не выполняется.
Вы можете использовать
\ z ..
Это абсолютный конец строки, за которым следуют два любых символа
If +
или ] *
прикреплен к концу, это все еще работает, отказываясь соответствовать чему-либо
Или используйте некоторое понимание списка, чтобы удалить бесполезные записи регулярного выражения, и соедините их, чтобы собрать их все вместе. Что-то вроде:
re.compile('|'.join([x for x in [regexp1, regexp2, ...] if x != None]))
Не забудьте добавить несколько комментариев рядом с этой строкой кода: -)