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

正则表达式分组捕获:匹配以Case开头、指定日期结尾的多行内容

解决单个正则匹配多个Case-日期段落的问题

看起来你遇到的核心问题是贪婪匹配导致正则从第一个Case一直吃到最后一个日期,而不是逐个捕获独立的段落。咱们来一步步解决这个问题:

问题根源

你之前用的[^]*或者[\s\S]*是贪婪模式的通配符,它们会尽可能多地匹配字符(包括换行),所以会直接从第一个Case开始,一直匹配到文本里最后一个符合格式的日期才停止,自然就只得到一个大分组。

解决方案:非贪婪匹配 + 边界控制

要让正则逐个捕获每个Case开头到对应日期结尾的段落,需要做两个关键调整:

  1. 把贪婪的*改成非贪婪的*?,让匹配到第一个符合条件的日期就停止;
  2. 加上正向预查,确保日期后面要么是下一个Case的开头,要么是文本结束,避免跨段落匹配。

最终正则表达式

开启i(不区分大小写)、g(全局匹配)、m(多行模式)标志后,使用这个正则:

^Case[\s\S]*?\d{1,2}\.\d{1,2}\.\d{2,4}(?=\s*$|\s*Case)

逐部分解释:

  • ^Case:在多行模式下,匹配每一行开头的Case(不区分大小写因为开了i标志);
  • [\s\S]*?:非贪婪匹配任意字符(包括换行),*?表示“匹配到后面的日期就停止”;
  • \d{1,2}\.\d{1,2}\.\d{2,4}:匹配你需要的日期格式(dd.mm.yyyy或dd.m.yyyy,因为\d{1,2}支持1位或2位的月份/日期);
  • (?=\s*$|\s*Case):正向预查,确保日期后面要么是空白+文本结束,要么是空白+下一个Case开头,彻底避免跨段落匹配。

测试示例

比如你的示例文本:

Case 1: 第一段内容
多行文本
29.8.1818

Case 2: 第二段内容
更多行
29.8.1818

Case 3: 第三段
29.8.1818

Case 4: 最后一段
收尾内容
29.8.1818

用这个正则会精准捕获4个独立的段落,每个都是从Case开头到对应日期结尾的完整内容。

额外提示

如果你的日期格式需要更严谨(比如限制月份1-12,日期1-31),可以把日期部分的正则优化得更精确,但针对当前需求,上面的正则已经足够解决你的分组问题啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:52:26