2015-04-07 60 views
2

我从本地目录中有这样的文件名列表。使用re和从列表中提取一些模式Python2.7

[ '20150301', '20150301121501.tar.gz', '20150302', '20150302121501.tar.gz', '20150303', '20150303121501.tar.gz']

我想提取yyyymmdd目录名称,而不是tar.gzfile。这是理想的结果。

[ '20150301', '20150302', '20150303']

我尝试这一个。

import re 
pattern = "^(?!.*tar.gz).*$" 
file_list = ['20150301', 
'20150301100.tar.gz', 
'20150302', 
'20150302100.tar.gz', 
'20150303', 
'20150303100.tar.gz'] 
matchOB = re.match(pattern , file_list) 

感谢您的阅读。

回答

0

你可以使用此代码与^\d+$正则表达式匹配是由仅数字的整个字符串:

import re 

file_list = ['20150301', 
'20150301100.tar.gz', 
'20150302', 
'20150302100.tar.gz', 
'20150303', 
'20150303100.tar.gz'] 
matchOB = [x for x in file_list if re.search(r"^\d+$", x)] 
print(matchOB) 

Sample online demo输出:

['20150301', '20150302', '20150303'] 

[x for x in file_list if re.search(r"^\d+$", x)]列表理解从仅由1列表返回任何元件+数字。

如果您的日期样式总是包含8位数字,您可以用^\d{8}$代替^\d+$样式。

+0

的示例程序@strinbizhec感谢和说明!说起贪婪,简单的列表更好['20150301','20150302','20150303']。 –

+0

对不起,答案并不完全正确,因为前瞻是多余的。 –

0

您可以简单地检查名称中没有'.tar.gz'的项目。

for fyle in ['20150301', '20150301121501.tar.gz', '20150302', '20150302121501.tar.gz', '20150303', '20150303121501.tar.gz']: 
    if '.tar.gz' not in fyle: 
     print fyle 

给输出:

20150301 
20150302 
20150303 

要让输出作为一个列表:

my_list = ['20150301', '20150301121501.tar.gz', '20150302', '20150302121501.tar.gz', '20150303', '20150303121501.tar.gz'] 
print [x for x in my_list if '.tar.gz' not in x] 

具有输出:

['20150301', '20150302', '20150303'] 
0

通过字符串处理:

我们可以用字符串isdigit()方法和len()函数来验证字符串。

演示:

>>> result = [] 
>>> input_dirs = ['20150301', '20150301121501.tar.gz', '20150302', '20150302121501.tar.gz', '20150303', '20150303121501.tar.gz'] 
>>> for i in input_dirs: 
... if i.isdigit() and len(i)==8: 
...  result.append(i) 
... 
>>> print result 
['20150301', '20150302', '20150303'] 
0

,如果你替换最后的陈述与

matchOB = [re.match(pattern, file).group() for file in file_list if re.match(pattern, file)] 
0

或者类似的东西,你的表达可以工作:

list = ['20150301', '20150301121501.tar.gz', '20150302', '20150302121501.tar.gz', '20150303', '20150303121501.tar.gz'] 
new_list=[] 

for l in list:  
    if l.find(".")<0:  
     new_list.append(l) 
相关问题