如何过滤掉这个列表,这样我们就只剩下yyyy格式的字符串列表了?
2021-11-11
2021-10-01
some_folder
some_other_folder所以我们最终得到了这样的列表:
2021-11-11
2021-10-01此外,如果列表中有前缀怎么办?
root/2021-11-11
root/2021-10-01
user/some_folder
root/some_other_folder最后我们想要:
root/2021-11-11
root/2021-10-01发布于 2021-11-23 19:23:31
我会让datetime模块使用strptime来处理这个问题。如果它不是'%Y-%m-%d'格式的,则会引发ValueError:
import datetime
lst = ['2021-11-11', '2021-10-01', 'some_folder', 'some_other_folder',
'root/2021-11-11', 'root/2021-10-01',
'user/some_folder', 'root/some_other_folder']
def filter_(s):
last_part = s.rsplit('/', maxsplit=1)[-1]
try:
datetime.datetime.strptime(last_part, '%Y-%m-%d')
return True
except ValueError:
return False
print([i for i in lst if filter_(i)])产出:
['2021-11-11', '2021-10-01', 'root/2021-11-11', 'root/2021-10-01']发布于 2021-11-23 19:23:41
您可以为此使用re库。就像这样。
编辑:更改了我的答案,因为@SorousHBakh第三纪关于一个异常的评论,我忘记了当您在迭代时修改一个可迭代对象时会发生的情况。
import re
li = [
'root/2021-11-11',
'root/2021-10-01',
'user/some_folder',
'root/some_other_folder',
]
new_list = li.copy()
for string in new_list:
if not re.fullmatch('.*\d{4}-\d{2}-\d{2}$',string):
li.remove(string)这也可以在一行中使用列表理解实现:
li = [
'root/2021-11-11',
'root/2021-10-01',
'user/some_folder',
'root/some_other_folder',
]
li = [string for string in li if re.fullmatch('.*\d{4}-\d{2}-\d{2}$',string)]发布于 2021-11-23 20:55:25
>>> import re
>>>
>>> filter_pattern = re.compile(r'.*\d{4}-\d{2}-\d{2}$')
>>>
>>> lst = [
... '2021-11-11', '2021-10-01', 'some_folder',
... 'some_other_folder', 'root/2021-11-11', 'root/2021-10-01',
... 'user/some_folder', 'root/some_other_folder'
... ]
>>>
>>> lst = [i for i in lst if (len(filter_pattern.findall(i) > 0)]
>>>
>>> lsthttps://stackoverflow.com/questions/70086629
复制相似问题