否定 fnmatch 模式

rub*_*bik 3 python glob fnmatch

考虑这一模式:*.py。它匹配所有以py扩展名结尾的路径。现在,是否有可能找到与其他所有内容相匹配的模式?

我认为这会做到:*[!.][!p][!y],但显然fnmatch.fnmatch总是False带着这个返回。

我想避免使用正则表达式。我知道我可以使用它们,但在这种情况下这是不可能的。

use*_*028 5

我个人更喜欢正则表达式,但如果你更喜欢 fnmatch,你可以这样做:

if fnmatch.fnmatch(file, '*[!p][!y]'):
        print(file)
Run Code Online (Sandbox Code Playgroud)

  • `*[!p][!y]` 匹配任何**不**将 `p` 作为倒数第二个字符 **且**不将 `y` 作为最后一个字符的内容。例如,带有“.pl”扩展名的 Perl 脚本将被排除。 (5认同)
  • @KyleStrand所以接受的答案正则表达式'*[!p][!y]'是错误的,因为它也排除了诸如:`.pl`,`hy`之类的东西。有没有办法排除整个句子而不是单个字符? (2认同)