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

如何用Python正则表达式提取编号列表中的段落文本?

Python正则提取编号列表文本的方案

直接提取单行内容的最简方案

如果你的列表项都是单行内容,用下面的正则配合re.findall()就能搞定:

import re

target_text = """1. foobar

2. foo

3. bar"""

extracted = re.findall(r'\d+\.\s*(.*)', target_text)
print(extracted)  # 输出: ['foobar', 'foo', 'bar']

正则说明:

  • \d+:匹配1个及以上的数字编号
  • \.:匹配编号后的点(必须转义,不然.会匹配任意字符)
  • \s*:匹配点后面的任意空白(空格、制表符都能覆盖)
  • (.*):捕获点和空白之后的所有内容,刚好就是你要的纯文本

支持多行内容的进阶方案

如果列表项可能跨多行,就加上re.DOTALL标志,用带正向预查的正则:

import re

target_text = """1. foobar
extra line here
2. foo

3. bar"""

extracted = re.findall(r'\d+\.\s*(.*?)(?=\n\d+\.|$)', target_text, re.DOTALL)
# 清理每个结果的首尾空白和换行
cleaned = [item.strip() for item in extracted]
print(cleaned)  # 输出: ['foobar\nextra line here', 'foo', 'bar']

正则说明:

  • (?=\n\d+\.|$):正向预查,找到下一个编号行或者文本结尾的位置,避免把下一个编号的内容也抓进来
  • re.DOTALL:让正则里的.能匹配换行符,这样就能捕获跨多行的列表项内容

你的原正则为啥失效?

你写的r'\d+.*?(?=\d|$)'问题出在:

  • 它会把编号、点号、空格都包含在匹配结果里,没法精准提取后面的纯文本
  • .*?的非贪婪匹配会过早停止,或者把不需要的符号也带进来,自然得不到你要的结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 22:37:18