Причина ^.*(?!txt)$
не работает, потому что вы используете отрицательный предпросмотр, но, как из-за алчной природы .*
и якоря $
вы в конце строки, и, таким образом, есть ничего впереди в этот момент, (так что для этого нет ничего неудачного).
Что вы пытаетесь сделать, может быть достигнуто с помощью отрицательного просмотра назад, который работает в обратном направлении, и выглядит как (^.*(?<!txt)$)
Следует отметить, что в то время как здесь работает с просмотром назад, Python позволяет только строки фиксированной длины для него (lookahead не имеет этого ограничения).
Другие реализации регулярных выражений позволяют ограниченные длины lookbehinds (то есть не могут использовать .*
, но могут делать .{0,10}
), в то время как другие (включая JavaScript) не поддерживают lookbehind вообще.
(Если вам нужно это для нефиксированного матча или в среде JS, предложение Wich о .*txt$
то отрицая результат может решить, что.)
Для получения дополнительной информации о как опережающем просмотре и просмотре назад, посмотри на этой странице: http://www.regular-expressions.info/lookaround.html
(конечно, вы должны быть в идеале с помощью \.txt
в регулярном выражении, чтобы обеспечить его полное расширение, и наиболее эффективное решение, скорее всего, уже предложил x.endswith('.txt') метод.)
'' 'в начале вашего регулярного выражения является излишним, поскольку вы используете re.match, который соответствует только началу строки. Если бы вы использовали re.search, это было бы важно. – wich
Обратите внимание, что вы хотите совместить полное расширение '.txt' вместо файлов, не заканчивающихся' txt': вы хотите, чтобы 'my_txt' соответствовал. – EOL
Кроме того, я вижу, что вы не приняли никаких ответов на любые ваши вопросы, если вы хотите продолжать получать ответы на свои вопросы, вы должны принять некоторые ответы. – wich