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

Python re模块正则提取两固定词间多行内容分组的方法

问题根因

你之前的正则无法拿到所有分组的核心原因是Python标准库re模块的特性限制:被量词(+/*/{m,n})修饰的捕获组,只会存储最后一次匹配的内容,不会保留每次重复匹配的结果。所以哪怕加了gms标志,你写的((?P<value>[^\n]+)\n)+结构最终只会返回最后匹配到的content3行,前两行的匹配结果会被覆盖。

推荐实现方案

不要硬写单条正则强行一步匹配,分两步实现可读性、容错率最高,适配任意行数的中间内容:

  • 先用非贪婪匹配截取出Word1和Word2之间的整块文本
  • 对截取出的文本做行拆分,过滤空行、去除每行首尾缩进空白,就能得到所有独立的content分组

代码实现如下:

import re

# 待匹配样例文本
sample_text = """Word1   content1 content1 content1
       content2 content2 content2
         
          content3 content3 content3
Word2
"""

# 第一步:提取两个标记之间的整块内容,re.S标志让.可以匹配换行
block = re.search(r"Word1(.*?)Word2", sample_text, flags=re.S).group(1)
# 第二步:拆分多行、过滤空行、去除每行首尾空白
content_list = [line.strip() for line in block.splitlines() if line.strip()]

print(content_list)
# 输出:['content1 content1 content1', 'content2 content2 content2', 'content3 content3 content3']
补充:固定行数的纯正则写法

如果你确定Word1和Word2之间固定只有3行有效内容,也可以用纯正则单次匹配,但这种写法灵活度差,内容行数变化就会失效:

pattern = r"Word1\s*(?P<v1>[^\n]+)\n\s*(?P<v2>[^\n]+)\n\s*(?P<v3>[^\n]+)\s*Word2"
res = re.search(pattern, sample_text)
print(res.groups())
# 输出:('content1 content1 content1', 'content2 content2 content2', 'content3 content3 content3')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:48:53