Задача:
- задано: список имен файлов изображений
- задача: создать новый список с именами файлов, не содержащими слова "thumb" - т.е. ориентироваться только на изображения без миниатюр (с помощью PIL - Python Imaging Library).
Я пытался r".*(?!thumb).*"
, но это не удалось.
Я нашел решение (здесь, в stackoverflow), чтобы добавить ^
к регулярному выражению и поместить .*
в отрицательный прогноз: r"^(?!.*thumb).*"
, и теперь это работает.
Дело в том, что я хотел бы понять, почему мое первое решение не сработало, но я этого не делаю. Поскольку регулярные выражения достаточно сложны, мне бы очень хотелось в них разобраться.
Что я понимаю, так это то, что ^
сообщает синтаксическому анализатору, что следующее условие должно соответствовать началу строки. Но разве .*
в (неработающем) первом примере также не начинается в начале строки? Я думал, что он начнется с начала строки и будет искать как можно больше символов, прежде чем достигнет «большого пальца». Если это так, он вернет несоответствие.
Может кто-нибудь объяснить, почему r".*(?!thumb).*"
не работает, а r"^(?!.*thumb).*"
работает?
Спасибо!
^
необходимо в сложном решении этой проблемы с регулярными выражениями, но в настоящее время я играю на Python 2.7+ Regex Tester чтобы узнать. - person Erik   schedule 14.12.2012