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

Notepad++ 8.1.1中非贪婪正则匹配结果不符合预期求助

问题解决方法

问题根因

你开启单行模式后.会匹配换行符,非贪婪匹配.*?仅会从当前匹配起始位置向后寻找最短的满足结束条件的内容,并没有限制不能跨</thing>节点,所以会从第一个匹配到的<thing Class="Building"开始,一直匹配到最近的104),自然出现跨节点的错误匹配。
Notepad++使用的是Boost正则引擎,你可以用排除式匹配限制不跨节点解决这个问题。

操作步骤

  1. 按下Ctrl+H打开替换窗口
  2. 勾选正则表达式选项,以下规则兼容是否勾选点匹配换行符两种场景
  3. 填写对应查找和替换规则:
  • 查找目标:(<thing Class="Building[^"]*">(?:(?!</thing>).)*<pos>\(\d+, 0, )104\)
  • 替换为:${1}103\)
  1. 点击全部替换即可完成修改

规则说明

  • [^"]*匹配Building后的任意后缀(比如_Door),保证所有Building、Building_xxx类的节点都能被匹配到
  • (?:(?!</thing>).)*为非捕获排除组,保证匹配内容不会跨越</thing>标签,不会出现跨节点匹配问题
  • \(\d+, 0, 匹配坐标前半部分,兼容任意x坐标值
  • 所有需要保留的内容都放在捕获组${1}中,仅将末尾的104)替换为103),避免歧义与错误

验证效果

针对你提供的示例代码,该规则仅会匹配3处符合要求的坐标:

  1. 第78行的(101, 0, 104)
  2. 第84行的(102, 0, 104)
  3. 第90行的(103, 0, 104)
    不会匹配非Building类节点,也不会匹配y坐标不是104的Building类节点,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 17:48:02