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

如何用Python正则提取编号标题及对应内容并分组存入列表?

问题

我有一段包含带编号(如10.、11.)标题及对应内容段落的文本,希望将每个编号对应的标题与内容作为一个块,分割后存入列表。以下是我尝试的代码,但未实现需求,请求帮助:

la_text = []
num = 1
for a in range(3):
    sepa = re.findall(r"\d*(.*)\d*", text)[num]
    la_text.append(sepa)
    num += 1

print(la_text)

文本示例:

10. Title text
text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2


text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2

text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2

11. Title text
text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2


text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2

12. Title text
text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2

13. Title text
text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2


text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2


text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2
解决方案

你的代码存在两个核心问题:

  1. 正则表达式r"\d*(.*)\d*"无法匹配编号标题+内容的结构,仅模糊提取数字间的内容,逻辑完全错误。
  2. 循环仅固定取前3个匹配结果,无法适配文本中所有编号块。

正确的做法是用正则匹配每个以数字开头的完整块,具体实现如下:

import re

text = """10. Title text
text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2


text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2

text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2

11. Title text
text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2


text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2

12. Title text
text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2

13. Title text
text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2


text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2


text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2text1 text2"""

# 匹配以数字开头的完整块,非贪婪模式捕获到下一个编号或文本结束
blocks = re.findall(r"^\d+\. .*?(?=^\d+\. |\Z)", text, re.MULTILINE | re.DOTALL)
# 清理每个块末尾的空白行
clean_blocks = [block.rstrip() for block in blocks]

print(clean_blocks)

代码说明:

  • 正则表达式r"^\d+\. .*?(?=^\d+\. |\Z)":
    • ^\d+\. :匹配行首的数字编号(如10. )
    • .*?:非贪婪模式匹配所有内容,避免一次性捕获整个文本
    • (?=^\d+\. |\Z):正向预查,匹配到下一个编号开头或文本结尾时停止
  • re.MULTILINE:让^匹配每一行的开头
  • re.DOTALL:让.匹配换行符,确保能捕获跨多行的内容
  • rstrip():去除每个块末尾的多余空白行,让内容更整洁

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 14:10:48