如何修改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
相关产品推荐
相关产品推荐

