使用re并从列表Python2.7中提取一些模式

时间:2015-04-07 08:27:19

标签: python regex list

我在本地目录中有这样的文件名列表。

  

['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)

感谢阅读。

5 个答案:

答案 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']

答案 1 :(得分: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+$模式替换为^\d{8}$

答案 2 :(得分: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']

答案 3 :(得分:0)

如果用

替换最后一个语句,则表达式可以正常工作
matchOB = [re.match(pattern, file).group() for file in file_list if re.match(pattern, file)]

答案 4 :(得分: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)