正则表达式匹配文件名blahblah_200901.csv(yyyymm)

时间:2016-03-04 18:58:16

标签: python regex pattern-matching match filenames

我一直在修补正则表达式以匹配看起来像这样的文件名:

blahblah_200901.csv (2009, January)
blahblah_201512.csv (2015, December)

我有一个从from_year,to_year,from_month,to_month传入的函数,所以我可以获取范围,但我对正确的正则表达式有困难。月份字段由两位数字指定(即01到12)。

import os, re
for f in os.listdir("/path/dir"):
   if re.match(x,f):
   print (f)

在上面的代码中遇到了正确的x。

1 个答案:

答案 0 :(得分:4)

最简单的就是根本不做任何匹配;相反,你有第一个和最后一个文件名,并看到该值适合2:

start = 'blahblah_{:04}{:02}'.format(from_year, from_month)
end = 'blahblah_{:04}{:02}'.format(to_year, to_month)

for f in os.listdir('/path/dir'):
    if start <= f <= end:
        print(f)

如果前缀不同,或者正则表达式更复杂,您可以使用捕获组来获取日期部分,然后将它们转换为整数:

m = re.match('blahblah(\d{4})(\d{2})', f)
if m:
    year = int(m.group(1))
    month = int(m.group(2))

    if (from_year, from_month) <= (year, month) <= (to_year, to_month):
        print(f)