首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从带有日期的字符串列表中筛选出字符串?

如何从带有日期的字符串列表中筛选出字符串?
EN

Stack Overflow用户
提问于 2021-11-23 19:16:09
回答 3查看 139关注 0票数 2

如何过滤掉这个列表,这样我们就只剩下yyyy格式的字符串列表了?

代码语言:javascript
运行
复制
2021-11-11
2021-10-01
some_folder
some_other_folder

所以我们最终得到了这样的列表:

代码语言:javascript
运行
复制
2021-11-11
2021-10-01

此外,如果列表中有前缀怎么办?

代码语言:javascript
运行
复制
root/2021-11-11
root/2021-10-01
user/some_folder
root/some_other_folder

最后我们想要:

代码语言:javascript
运行
复制
root/2021-11-11
root/2021-10-01
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-11-23 19:23:31

我会让datetime模块使用strptime来处理这个问题。如果它不是'%Y-%m-%d'格式的,则会引发ValueError:

代码语言:javascript
运行
复制
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)])

产出:

代码语言:javascript
运行
复制
['2021-11-11', '2021-10-01', 'root/2021-11-11', 'root/2021-10-01']
票数 5
EN

Stack Overflow用户

发布于 2021-11-23 19:23:41

您可以为此使用re库。就像这样。

编辑:更改了我的答案,因为@SorousHBakh第三纪关于一个异常的评论,我忘记了当您在迭代时修改一个可迭代对象时会发生的情况。

代码语言:javascript
运行
复制
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)

这也可以在一行中使用列表理解实现:

代码语言:javascript
运行
复制
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)]
票数 1
EN

Stack Overflow用户

发布于 2021-11-23 20:55:25

代码语言:javascript
运行
复制
>>> 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)]
>>> 
>>> lst
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70086629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档