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

如何以"Title"为分隔符拆分列表生成嵌套子列表?

解决列表按"Title"开头元素拆分的问题

嗨,我来帮你搞定这个问题~首先得指出你之前思路的小问题:re.findall是用来处理字符串的,但你直接传入了列表l,这本身就不符合正则函数的使用场景。而且就算把列表转成字符串,你写的正则也会漏掉最后一组——因为它匹配的是Title开头到下一个Title的内容,最后一组后面没有Title,自然就匹配不到啦。

下面给你两种靠谱的实现方法,优先推荐第一种,简单直观还好理解:

方法一:遍历列表手动分组(最推荐)

这个方法直接操作列表元素,逻辑清晰,不容易踩坑:

l = ["Title abc", "text1", "text", "Title def", "text4", "text5", "Title ghi", "text4", "text5"]
new = []
current_sublist = []

for item in l:
    # 遇到以"Title"开头的元素,就开启新的子列表
    if item.startswith("Title"):
        # 如果当前已有未完成的子列表,先把它加入结果
        if current_sublist:
            new.append(current_sublist)
        # 初始化新的子列表,加入当前Title项
        current_sublist = [item]
    else:
        # 非Title项,直接加入当前子列表
        current_sublist.append(item)

# 循环结束后,别忘了把最后一个子列表加入结果
if current_sublist:
    new.append(current_sublist)

print(new)

运行后就能得到你想要的输出:

[["Title abc", "text1", "text"], ["Title def", "text4", "text5"], ["Title ghi", "text4", "text5"]]

方法二:用正则处理(适合熟悉正则的场景)

如果你一定要用正则,得先把列表转成字符串,再匹配后拆分,注意要处理最后一组没有后续Title的情况:

import re

l = ["Title abc", "text1", "text", "Title def", "text4", "text5", "Title ghi", "text4", "text5"]
# 把列表转成用换行分隔的字符串(假设元素里没有换行符)
list_str = "\n".join(l)
# 正则匹配:匹配从Title开始,到下一个Title或者字符串结尾的内容
matches = re.findall(r"(Title.*?)(?=Title|$)", list_str, re.DOTALL)
# 把每个匹配到的字符串拆分成列表
new = [match.split("\n") for match in matches]

不过这个方法有个局限性:如果你的列表元素里本身包含换行符,拆分的时候会出错,所以还是第一种方法更通用哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 14:23:09