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

正则表达式如何仅匹配两个指定词之间含目标子串的内容

需求说明

需实现正则匹配规则:仅当<Notes>与</Notes>标签对之间存在目标子串sample时命中匹配,搜索范围严格限制在单组标签的区间内,不允许跨标签区间匹配。因特定业务要求,不采用XML解析方式处理文本。

原有方案问题

此前编写的正则表达式如下:

<Notes>(?:(?!<Notes>)[\s\S])*?sample(?:[\s\S\w]+)<\/Notes>(?:(?<![\s\S\w]<\/Notes>))*?

使用的匹配修饰符为/gmU,测试时无法严格将匹配范围限制在单组边界区间内,存在跨区间误匹配问题。
测试使用的两组文本:

  • 测试文本1:TextBefore<Notes>this is sample notes</Notes>TextWiths1ample<Notes>this is sample notes</Notes>
  • 测试文本2:TextBefore<Notes>this is sample notes</Notes>TextWithsample<Notes>this is sample notes</Notes>
正确正则写法

使用如下正则即可满足需求,修饰符仅需保留/g:

<Notes>((?!<\/Notes>|<Notes>)[\s\S])*?sample((?!<\/Notes>|<Notes>)[\s\S])*<\/Notes>

匹配逻辑说明

  • 起始位置固定匹配<Notes>开标签
  • 第一段非贪婪匹配:逐字符匹配任意内容,每匹配一个字符前都校验当前位置后既不是新的<Notes>开标签,也不是</Notes>闭标签,确保匹配范围不会提前越出当前标签块
  • 匹配目标子串sample
  • 第二段贪婪匹配:继续匹配当前标签块内sample之后的剩余内容,同样全程做边界校验,不允许跨出当前标签区间
  • 结尾位置固定匹配</Notes>闭标签
    该写法会将匹配范围严格锁定在单个<Notes>标签块内部,无论标签块外的文本是否包含sample,都不会出现跨区间把外部文本纳入匹配结果的问题,两组测试文本均可得到正确匹配结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 22:12:22