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

如何用Python提取以[1]、(1.1)等带括号编号开头的段落?

问题需求

需要用Python提取以[1]、[1.1]、(2)、(1.2)这类带层级结构的括号编号开头,且到下一个同类型编号结束的段落。现有代码仅支持单个数字的[]/()编号,无法处理层级编号,且正则匹配逻辑存在问题。

现有代码的问题

  1. 正则表达式错误:re.compile("\[\d\]") or re.compile("\(\d\)")这种写法不会同时匹配两种括号,第二个compile结果会被忽略,而且仅匹配单个数字,不支持1.1这类层级编号。
  2. 编号连续性判断逻辑错误:int(current)-int(prev) ==1只适用于整数编号,无法处理带小数点的层级编号(比如1之后接1.1是合法段落开头,但该逻辑会过滤掉这类情况)。

改进方案

下面是修正后的代码,支持两种括号的层级编号匹配,并正确分割段落:

import re

def extract_numbered_paragraphs(text):
    # 匹配[数字]、(数字)、[1.1]、(2.3.4)这类层级编号
    pattern = re.compile(r'(\[|\()\d+(\.\d+)*(\]|\))')
    # 获取所有匹配的起始位置和匹配内容
    matches = list(pattern.finditer(text))
    if not matches:
        return []
    
    paragraphs = []
    # 遍历所有匹配项,分割段落
    for i in range(len(matches)):
        start_idx = matches[i].start()
        if i < len(matches) - 1:
            end_idx = matches[i+1].start()
            paragraph = text[start_idx:end_idx].strip()
        else:
            # 最后一段到文本末尾
            paragraph = text[start_idx:].strip()
        paragraphs.append(paragraph)
    
    return paragraphs

# 测试示例
test_text = """[1] 这是第一个段落的内容,包含多行
或者换行的情况。
[1.1] 这是第一个段落的子层级内容,属于[1]的下级。
(2) 这是第二种括号开头的段落,测试不同括号类型。
(2.1) 这是(2)的子层级,验证层级编号的提取。"""

result = extract_numbered_paragraphs(test_text)
for idx, para in enumerate(result, 1):
    print(f"--------段落 {idx}--------------")
    print(para)

代码说明

  1. 正则表达式:r'(\[|\()\d+(\.\d+)*(\]|\))'
    • (\[|\():匹配开头的[或(
    • \d+(\.\d+)*:匹配数字开头,后面可跟任意多个.数字(比如1、1.1、2.3.5都能匹配)
    • (\]|\)):匹配结尾的]或)
  2. 段落分割:通过获取所有匹配的起始位置,将文本按相邻两个匹配的位置分割,最后一段直接取到文本末尾,确保每个段落都是从当前编号开头到下一个编号开头前的内容。
  3. 兼容性:不管编号是整数还是层级结构,不管是方括号还是圆括号,都能正确匹配和分割。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 02:58:27