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

如何修改Python代码实现列表项提取与上下文格式化?

问题解决:提取带上下文的列表项

核心需求拆解

从混合了列表和无关文本的输入中,完成以下操作:

  • 识别独立的列表块(支持有序/无序列表)
  • 以每个列表的第一个项作为上下文,关联该列表的所有子项
  • 过滤掉所有非列表的无关内容
  • 输出结构化的数组,格式为 [{"context": "列表顶部项", "items": ["项1", "项2"...]}, ...]

解决方案代码

import re

def extract_list_with_context(input_str):
    # 匹配有序/无序列表块的正则:捕获列表起始项,以及后续所有同层级列表项
    # 支持 - /* + 开头的无序列表,和数字. 开头的有序列表
    list_pattern = re.compile(
        r'^([-*+]|\d+\.)\s+(.*?)(?:\n(?:[-*+]|\d+\.)\s+(.*?))*',
        re.MULTILINE | re.DOTALL
    )
    
    result = []
    # 遍历所有匹配到的列表块
    for match in list_pattern.finditer(input_str):
        # 提取列表的第一个项作为上下文
        context = match.group(2).strip()
        # 收集所有列表项:先加上下文,再处理后续捕获的项
        items = [context]
        # 后续的项在group(3)及之后,用groups()获取所有非None的捕获组
        for item in match.groups()[2:]:
            if item:
                items.append(item.strip())
        # 添加到结果数组
        result.append({"context": context, "items": items})
    
    return result

# 测试示例
test_input = """
这是无关文本,要被过滤掉。
- 水果列表
- 苹果
- 香蕉
- 橙子

1. 编程语言排行
2. Python
3. Java
4. JavaScript

* 日常任务
* 买菜
* 打扫卫生
* 整理文件
"""

output = extract_list_with_context(test_input)
print(output)

代码说明

  • 正则匹配逻辑:用多行模式匹配每个独立的列表块,捕获列表起始标记(无序列表的 -/*+ 或有序列表的数字点)和对应的内容,同时捕获后续同层级的所有列表项。
  • 上下文关联:每个列表块的第一个项直接作为该列表的context,后续项归入items数组。
  • 无关内容过滤:正则只匹配列表块,自然忽略所有非列表的文本内容。
  • 兼容性:支持常见的无序列表和有序列表格式,处理换行和缩进(只要是同层级的列表项都会被捕获)。

测试输出

运行代码后,会得到符合要求的结构化数组:

[
    {"context": "水果列表", "items": ["水果列表", "苹果", "香蕉", "橙子"]},
    {"context": "编程语言排行", "items": ["编程语言排行", "Python", "Java", "JavaScript"]},
    {"context": "日常任务", "items": ["日常任务", "买菜", "打扫卫生", "整理文件"]}
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 04:12:09