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

如何用正则表达式提取7.X类标题与后续层级标题间的文本?

正则匹配标题并合并内容解决方案

问题分析

你要处理的文本是将章节标题(如7.1 CAPITAL TITLE)与其下方的多行文本合并为一行,但之前的正则表达式没达到效果,核心问题如下:

  • 未开启re.DOTALL模式,导致.*?无法匹配换行符,抓不到标题下的多行内容
  • 分组逻辑复杂且冗余,findall返回的是分组元组而非合并后的完整内容
  • 未考虑文本末尾无后续标题的情况,会遗漏最后一个标题的内容

修正后的实现代码

import re

txt_extraction = """7.1 CAPITAL TITLE

text here
text here

7.2.2 CAPITAL TITLE"""

# 正则模式:匹配标题 + 后续内容(直到下一个标题或文本结束)
pattern = re.compile(
    r'^(7\.\d+(?:\.\d+)*\s+[A-Z\s]+)\s*(.*?)(?=^\d+\.\d+(?:\.\d+)*\s+[A-Z]|$)',
    re.DOTALL | re.MULTILINE
)

matches = pattern.findall(txt_extraction)
result_lines = []

for title, content in matches:
    # 清理内容:把换行、多空格替换成单个空格,再去除首尾空格
    cleaned_content = re.sub(r'\s+', ' ', content).strip()
    # 拼接标题和内容
    if cleaned_content:
        result_lines.append(f"{title.strip()} {cleaned_content}")
    else:
        result_lines.append(title.strip())

# 输出结果
print('\n'.join(result_lines))

代码说明

  1. 正则模式解析:

    • ^:匹配行开头(结合re.MULTILINE)
    • 7\.\d+(?:\.\d+)*:匹配7.X/7.X.X/7.X.X.X格式的章节号
    • \s+[A-Z\s]+:匹配标题的大写字母及空格
    • (.*?):非贪婪匹配标题后的所有内容(开启re.DOTALL后包含换行)
    • (?=^\d+\.\d+(?:\.\d+)*\s+[A-Z]|$):正向预查,匹配到下一个标题开头或文本结尾时停止
  2. 内容清理:用re.sub(r'\s+', ' ', content)把所有连续空白(换行、空格、制表符)替换成单个空格,保证内容紧凑。

运行结果

7.1 CAPITAL TITLE text here text here
7.2.2 CAPITAL TITLE

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 02:55:31