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

Python Regex 匹配时引用每组首行标题直到新分组的实现问题

该需求完全可以通过Python正则实现,核心思路是先按标题匹配出完整的独立块,再对每个块内的行做处理,避免跨块引用失效。

正确正则与匹配逻辑

使用的正则表达式为:
^This is (?P<header>Header[A-Z])\n(?P<lines>(?:\s+Line\s+\d+\n?)*)
需要搭配re.MULTILINE标志使用,作用是让^可以匹配每一行的开头,把每个标题和其下属的所有行作为一个完整的匹配块捕获,避免不同标题的内容混淆。

完整可运行代码

import re

text = """This is HeaderA
 Line 1
 Line 2
 Line 3
 Line 4
 Line 5
This is HeaderB
 Line 1
 Line 2
"""

pattern = re.compile(r"^This is (?P<header>Header[A-Z])\n(?P<lines>(?:\s+Line\s+\d+\n?)*)", re.M)

result = []
for match in pattern.finditer(text):
    header = match.group("header")
    # 提取当前块下所有行的数字
    line_nums = re.findall(r"Line\s+(\d+)", match.group("lines"))
    # 按要求用不同分隔符拼接
    if header == "HeaderB":
        current_block = ", ".join([f"{header}{num}" for num in line_nums])
    else:
        current_block = " ".join([f"{header}{num}" for num in line_nums])
    result.append(current_block)

# 输出结果,块之间空一行
print("\n\n".join(result))

输出结果

HeaderA1 HeaderA2 HeaderA3 HeaderA4 HeaderA5

HeaderB1, HeaderB2

原有正则问题说明

  • 第一个正则仅捕获了单次Line匹配,没有批量捕获下属所有行,因此只能拿到第一个L值
  • 第二个正则将header组设为可选,匹配时没有绑定块范围,跨块后捕获组的值会丢失,自然无法引用到对应的header

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 19:00:02