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

如何用正则表达式匹配两个指定模式之间的所有多行内容

多行模式下两个标记间内容的正则提取方案

核心问题原因

默认正则规则中,.元字符仅匹配换行符以外的字符,因此你之前的单行匹配写法无法适配跨多行的场景。

可用解决方案

方案1:开启DotAll(单行)模式(兼容性较好,支持绝大多数主流正则引擎)

直接在正则开头加(?s)内联标识开启DotAll模式,让.可以匹配换行符,配合非贪婪匹配即可精准提取内容:

(?s)(?<=pattern1\n).*?(?=\npattern2)

如果要兼容pattern1/pattern2前后存在空行的场景,可调整为:

(?s)(?<=pattern1\s*).*?(?=\s*pattern2)

使用示例(Python):

import re

test_content = """pattern1
line1
   line2
      line3
   line4
line5
pattern2"""

match_res = re.search(r'(?s)(?<=pattern1\n).*?(?=\npattern2)', test_content)
if match_res:
    print(match_res.group())

运行后直接输出pattern1和pattern2之间的所有行内容。

方案2:兼容无DotAll模式的引擎

如果你的运行环境不支持DotAll模式(比如旧版JavaScript),可以用[\s\S]字符集代替.,该字符集匹配所有空白、非空白字符,天然包含换行符,无需额外开启模式:

(?<=pattern1\n)[\s\S]*?(?=\npattern2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:06:03