You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从字符串列表中筛选符合yyyy-mm-dd格式的日期元素?

字符串列表按日期格式过滤实现方案

核心实现逻辑(所有语言通用)

  • 预定义正则规则:使用^\d{4}-\d{2}-\d{2}$匹配标准yyyy-mm-dd格式,规则要求整段内容为「4位年份+横杠+2位月份+横杠+2位日期」,总长度固定为10位
  • 路径兼容处理:对每个输入字符串,先统一替换Windows路径分隔符\为Unix分隔符/,再按/拆分取最后一段子串
  • 过滤规则:用上述正则匹配最后一段子串,匹配成功则保留原字符串,否则过滤

该逻辑可同时覆盖「纯日期字符串」「带路径前缀的字符串」两种场景,纯日期字符串拆分后最后一段就是其本身,无需额外分支判断


Python 实现示例

import re
from typing import List

# 预编译正则,提升批量匹配性能
DATE_PATTERN = re.compile(r'^\d{4}-\d{2}-\d{2}$')

def filter_date_strings(input_list: List[str]) -> List[str]:
    result = []
    for s in input_list:
        # 兼容不同系统的路径分隔符
        last_segment = s.replace('\\', '/').split('/')[-1]
        if DATE_PATTERN.match(last_segment):
            result.append(s)
    return result

测试用例1:纯日期字符串列表

input1 = [
    "2021-11-11",
    "2021-10-01",
    "some_folder",
    "some_other_folder"
]
print(filter_date_strings(input1))
# 输出:['2021-11-11', '2021-10-01']

测试用例2:带路径前缀的列表

input2 = [
    "root/2021-11-11",
    "root/2021-10-01",
    "user/some_folder",
    "root/some_other_folder"
]
print(filter_date_strings(input2))
# 输出:['root/2021-11-11', 'root/2021-10-01']

可选增强:合法性校验

如果需要过滤2023-13-01、2023-02-30这类格式正确但实际不存在的日期,可以在正则匹配通过后增加日期解析校验:

from datetime import datetime

def filter_valid_date_strings(input_list: List[str]) -> List[str]:
    result = []
    for s in input_list:
        last_segment = s.replace('\\', '/').split('/')[-1]
        if not DATE_PATTERN.match(last_segment):
            continue
        # 校验日期是否合法
        try:
            datetime.strptime(last_segment, '%Y-%m-%d')
        except ValueError:
            continue
        result.append(s)
    return result

内容的提问来源于stack exchange,提问作者caasswa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 06:15:03