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

如何指定正则分组的结束边界以提取重复分组间的目标内容

正则匹配方案

你之前的写法出现匹配范围过大的问题,核心是.*默认采用贪婪匹配规则,会尽可能多的匹配符合条件的字符,所以会从第一个dog一直匹配到整个文本最后一个cat的位置,不会在遇到第一个cat时停止。你尝试的(?s)(?:dog.*(cat){1})写法也没有解决问题,原因是{1}仅限制cat匹配一次,不会改变前面.*的贪婪特性,正则还是会先让.*匹配尽可能多的内容,再回头匹配最后一个cat,匹配范围还是覆盖了从第一个dog到最后一个cat的全部内容。

可用正则写法

你可以用非贪婪匹配+正向预查的方案,直接提取cat和下一个dog(或文本末尾)之间的内容,正则表达式如下:

(?s)cat\r?\n(.*?)(?=\r?\ndog|\Z)

规则说明

  • (?s):开启单行匹配模式,让.可以匹配换行符
  • cat\r?\n:匹配cat所在行的末尾,兼容Windows和Unix换行格式
  • (.*?):非贪婪匹配任意字符,捕获分组1的内容就是你需要提取的目标内容
  • (?=\r?\ndog|\Z):正向零宽预查,匹配到下一个dog开头的行或者文本结束位置就终止,不会将dog纳入匹配结果

匹配结果

对示例文本执行匹配后,依次提取所有捕获分组1的内容,拼接后即可得到你需要的输出:

123
XYZ
456
ABC
789

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:24:06