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

如何在Python中使用正则表达式高效分割含日期结构的列表

高效处理日期分隔的列表,生成按天分组的嵌套列表

我明白你现在的困扰——把这种日期作为分隔符的列表转换成按天分组的嵌套列表,用合并字符串再分割的方法确实会把事情复杂化,还容易丢失关键的日期信息。其实我们可以换个更直接高效的思路,直接遍历原列表进行分组,不需要把所有内容拼在一起处理。

核心思路

  1. 先写一个辅助函数,用来判断列表中的元素是不是符合格式的日期;
  2. 遍历原列表,遇到日期就新建一个子列表,把日期放进去;遇到非日期内容,就把它加入当前的子列表;
  3. 遍历结束后,把最后一个子列表也加入结果中。

具体实现代码

import re

def is_date(item):
    # 匹配「星期几, 月份 日期, 年份」的格式
    date_pattern = r'^[A-Za-z]+, [A-Za-z]+ \d{1,2}, \d{4}$'
    return re.fullmatch(date_pattern, item) is not None

input_list = [
    'Wednesday, March 16, 2022',
    'bla-bla-bla',
    'Hello World !',
    'Friday, April 8, 2022',
    "Can't wait for the weekend",
    'See you !'
]

result = []
current_group = []

for item in input_list:
    if is_date(item):
        # 如果当前已有分组,先把它加入结果
        if current_group:
            result.append(current_group)
        # 新建分组,把日期作为第一个元素
        current_group = [item]
    else:
        # 非日期内容加入当前分组
        current_group.append(item)
# 别忘了把最后一个分组加入结果
if current_group:
    result.append(current_group)

print(result)

代码说明

  • is_date函数用re.fullmatch确保整个元素都符合日期格式,避免误判内容里的类似片段;
  • 遍历过程中我们始终维护current_group,用来装当前日期对应的所有内容,遇到新日期就把之前的分组存起来,新建分组;
  • 最后一定要处理循环结束后剩下的current_group,不然最后一天的内容会丢失。

运行这段代码后,你会得到期望的嵌套列表:

[
    ['Wednesday, March 16, 2022', 'bla-bla-bla', 'Hello World !'],
    ['Friday, April 8, 2022', "Can't wait for the weekend", 'See you !']
]

为什么不推荐合并字符串分割?

你之前尝试的合并后split的方法,最大问题是分割后会丢失日期本身,而且如果内容里有类似日期的字符片段,还会导致错误分割。直接遍历的方法不仅效率更高(不需要拼接大字符串),逻辑也更清晰,后续要调整分组规则(比如把日期放在子列表最后)也非常容易——只需要把current_group = [item]改成current_group = [],然后后续在分组结束时再把日期加进去就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 18:52:26