【问题标题】:Python Regex: Finding files without a certain extensionPython Regex:查找没有特定扩展名的文件
【发布时间】:2014-06-02 16:15:01
【问题描述】:

我正在尝试找出用于搜索目录并返回目录中没有特定前缀“abc_”的文件数的正则表达式。例如,在包含文件 def_notes.txt、abc_notes.txt、ghi_notes.txt 的目录中,该函数将识别出有两个文件没有 'abc_' 前缀并返回 2。

直截了当,我在编写正则表达式来表示这一点时遇到了麻烦。我试过 re.compile('^(.(?!(abc_)))*$') 找到here。但是,这似乎不起作用。将第一个点留在括号内实际上匹配文件“abc_notes.txt”。如果我删除那个点,它将不匹配'abc_notes.txt',但它也不匹配'def_notes.txt'。

编辑:澄清一下,一旦我弄清楚表达式,我将使用 glob 或 os 包来完成这项工作。我只是在 python shell 中使用 re.compile 和搜索来找出正则表达式。

【问题讨论】:

  • 我不会为此使用正则表达式。只需os.walk 和纯python
  • 您可以编写一个正则表达式来测试单个文件名是否与您的模式匹配,但正则表达式并不擅长计算事物。您需要遍历文件并测试每个文件,然后自己计算它们。

标签: python regex parsing


【解决方案1】:

这段代码打印出当前目录中有多少文件不是以z开头的:

import glob, re

print len( [path for path in glob.glob('*')
            if not path.startswith('z')
            ]
           )

以下代码使用正则表达式。它匹配字符串开头的字母“z”——然后使用(?!...) 语法反转匹配。

pat = re.compile('^(?!z)')
print len( filter(None, map(pat.match, glob.glob('*'))) )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-21
    • 2019-07-21
    • 2011-03-10
    • 1970-01-01
    • 2011-03-13
    • 1970-01-01
    • 2012-10-13
    相关资源
    最近更新 更多