如何从带有日期的字符串列表中过滤掉字符串?

caa*_*swa 2 python

如何过滤掉这个列表,以便我们只留下 yyyy-mm-dd 格式的字符串列表?

2021-11-11
2021-10-01
some_folder
some_other_folder
Run Code Online (Sandbox Code Playgroud)

这样我们最终得到一个像这样的列表:

2021-11-11
2021-10-01
Run Code Online (Sandbox Code Playgroud)

如果列表有前缀怎么办?

root/2021-11-11
root/2021-10-01
user/some_folder
root/some_other_folder
Run Code Online (Sandbox Code Playgroud)

我们希望最终得到:

root/2021-11-11
root/2021-10-01
Run Code Online (Sandbox Code Playgroud)

Sor*_*ary 5

我会让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)])
Run Code Online (Sandbox Code Playgroud)

输出 :

['2021-11-11', '2021-10-01', 'root/2021-11-11', 'root/2021-10-01']
Run Code Online (Sandbox Code Playgroud)