我一直在修补正则表达式以匹配看起来像这样的文件名:
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。
答案 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)