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

Notepad++正则匹配GROUP内带值PARENT标签并实现替换

Notepad++正则替换XML中GROUP内带值PARENT标签内容

需求说明

在Notepad++中使用正则表达式完成以下操作:

  • 仅匹配<GROUP>标签对范围内,从<GROUP>起始标签到第一个带值的<PARENT>标签结束的内容,匹配不可跨多个<GROUP>标签
  • 将带值<PARENT>标签的内容替换为对应<GROUP>的NAME属性值
  • 忽略空的<PARENT/>标签

问题分析

用户原正则表达式<GROUP NAME="(.+?)">((?!GROUP).)*<PARENT>(.+?)</PARENT>存在缺陷:负向预查(?!GROUP)仅限制单个字符不包含"GROUP",无法阻止匹配跨越多个<GROUP>标签,导致错误匹配多块GROUP内容。

解决方案

查找正则表达式

<GROUP NAME="(.+?)">((?:(?!</?GROUP>|<PARENT/>).|\r?\n)*)<PARENT>(.+?)</PARENT>

替换表达式

<GROUP NAME="$1">$2<PARENT>$1</PARENT>

Notepad++操作设置

  1. 打开「替换」对话框(快捷键Ctrl+H)
  2. 切换到「正则表达式」模式
  3. 无需勾选「.匹配换行符」(正则已通过|\r?\n处理跨行匹配)

正则逻辑说明

  • <GROUP NAME="(.+?)">:匹配<GROUP>起始标签,捕获NAME属性值到分组1,后续替换用$1引用该值
  • ((?:(?!</?GROUP>|<PARENT/>).|\r?\n)*):匹配<GROUP>内的中间内容,通过负向预查确保:
    • 不匹配<GROUP>或</GROUP>标签,彻底避免跨GROUP匹配
    • 不匹配空的<PARENT/>标签,自动忽略无值的情况
    • |\r?\n保证跨行的标签内容能被正常匹配
  • <PARENT>(.+?)</PARENT>:匹配带值的<PARENT>标签,捕获原有内容到分组3(替换时无需使用该分组)

效果验证

针对示例XML中的<GROUP NAME="Three">块,替换后结果为:

<GROUP NAME="Three">
<SomeTag1>
<PARENT>Three</PARENT>
</GROUP>

<GROUP NAME="Four">块替换后为:

<GROUP NAME="Four">
<PARENT>Four</PARENT>
<OTHERTAG3/>
</GROUP>

含空<PARENT/>的<GROUP NAME="One">和<GROUP NAME="Two">块不会被匹配或修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 01:00:59