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

正则表达式提取含起始编号至下一个编号前章节的需求与测试

正则表达式提取带编号章节的验证与优化方案

首先得说,你原来写的正则\[\d+:\d+\][\s\S]*[^\[\d+:\d+\]]其实没法实现你要的效果,咱们拆解下问题:

原正则的核心问题

  • [\s\S]*是贪婪匹配,会直接把从起始编号到文本末尾的所有内容都吞掉,根本不会停在下一个编号前
  • [^\[\d+:\d+\]]是个错误的字符集写法:字符集里的+是普通字符,这个表达式只匹配一个不是[、数字、+、:、]的字符,完全起不到“截止到下一个编号”的作用,反而会多截取一个无关字符

优化后的正则方案

针对你的需求——提取从指定[X:Y]编号开始,到下一个编号(不含)或文本结尾的内容,给你两个靠谱的方案:

方案一:非贪婪匹配+正向预查(推荐)

这个方案利用正向预查来预判下一个编号的出现,精准停止:

\[\d+:\d+\][\s\S]*?(?=\[\d+:\d+\]|$)

各部分解释:

  • \[\d+:\d+\]:精准匹配开头的章节编号(比如[14:5])
  • [\s\S]*?:非贪婪模式匹配任意字符(包括换行),避免贪婪匹配吞掉所有内容
  • (?=\[\d+:\d+\]|$):正向预查,检查后续内容是下一个章节编号或者文本结尾,确保截取到下一个编号前就停止

方案二:否定预查循环(兼容旧引擎)

如果你的正则环境不支持正向预查(现在大部分工具都支持),可以用这个替代方案:

\[\d+:\d+\](?:(?!\[\d+:\d+\])[\s\S])*

各部分解释:

  • (?:(?!\[\d+:\d+\])[\s\S])*:循环匹配每个字符,只要当前位置不是下一个章节编号的开头,就继续匹配,同样能精准停在下一个编号前

效果验证

用方案一的正则测试你提供的目标文本,提取[14:5]的内容会得到:

[14:5] And from henceforth you shall not ascend into heaven unto all eternity, and ⌈in bonds⌉ of the earth the decree has gone forth to bind you for all the days of the world.

完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:35:17