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

如何使用PCRE多行正则表达式提取多行字符串的分段内容?

用PCRE多行正则实现指定文本分割方案

输入文本

Some content here

%% some text 1

Some content here 1

%% some text 2

Some content here 2

需求说明

需要将上述文本分割为以下两种结果之一:

结果一

[
  "Some content here\n\n",
  "%% some text 1",
  "\n\nSome content here 1\n\n",
  "%% some text 2",
  "\n\nSome content here 2\n\n"
]

结果二

[
  "Some content here\n\n",
  "%% some text 1\n\nSome content here 1\n\n",
  "%% some text 2\n\nSome content here 2\n\n"
]

解决方案

两种结果都可以通过PCRE正则实现,核心是启用单行模式((?s),让.匹配换行符),结合正向预查来分割内容:

实现结果一的正则

(?s)(^.*?(?=%%)|%%.*?(?=%%|$))
  • 匹配逻辑:
    1. ^.*?(?=%%):匹配从文本开头到第一个%%之前的所有内容(包含换行)
    2. %%.*?(?=%%|$):匹配从%%开始,到下一个%%或文本结尾的所有内容
    3. 分支|将两种匹配规则合并,最终得到结果一的分割列表

实现结果二的正则

(?s)(^.*?(?=%%)|%%.*?(?=\n\n%%|$))
  • 匹配逻辑:
    1. ^.*?(?=%%):同结果一,匹配开头到第一个%%前的内容
    2. %%.*?(?=\n\n%%|$):匹配从%%开始,到下一个\n\n%%(空行+%%)或文本结尾的所有内容,这样就把每个%%块及其后续关联内容合并为一个匹配项,对应结果二的分割列表

关于之前尝试的问题

你之前用的(%% .+)加多行模式(m)无法满足需求,是因为多行模式仅改变^和$的匹配范围(匹配行首/行尾),但.+默认不匹配换行符,所以只能匹配单行的%%开头内容。而启用单行模式(?s)后,.可以跨行匹配,才能实现跨行的内容分割。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 01:52:31