Notepad++使用正则将XML每个Song节点下Num="-1"替换为从9递增数值
可落地操作方案
首先说明:Notepad原生的正则查找替换不支持自定义计数、分节点重置计数的逻辑,没法直接靠写一个正则表达式完成需求,用Notepad官方插件库的PythonScript插件就能零额外软件实现效果,全程点鼠标加复制粘贴就行,不需要代码基础。
- 安装对应插件
打开Notepad++,点击顶部菜单栏「插件」→「插件管理」,在搜索框输入PythonScript,勾选搜索到的对应插件,点击右上角「安装」,等待插件安装完成后Notepad++会自动重启。
- 安装对应插件
- 创建处理脚本
重启完成后,点击顶部菜单栏「插件」→「PythonScript」→「New Script」,在弹出的保存窗口里给脚本随便命名,比如poi_replace.py,直接点保存就行,不用改保存路径。
- 创建处理脚本
- 粘贴处理代码
保存后会自动打开脚本编辑页,把下面的代码完整复制粘贴到编辑区,按Ctrl+S保存脚本:
- 粘贴处理代码
import re # 开启撤销组,操作不对可以一键Ctrl+Z回退 editor.beginUndoAction() file_content = editor.getText() processed = [] # 遇到新Song节点就重置的计数器,初始值为9 current_num = 9 # 匹配规则:识别<Song节点开头、识别所有Num="-1"属性 match_rule = re.compile(r'<Song\b|Num="-1"', re.IGNORECASE) last_pos = 0 for item in match_rule.finditer(file_content): # 先把匹配位置前的无修改内容存入结果 processed.append(file_content[last_pos:item.start()]) if item.group(0).lower().startswith('<song'): # 碰到新的Song节点,计数器重置回9 current_num = 9 processed.append(item.group(0)) else: # 碰到要替换的Num="-1",替换为当前计数值后计数+1 processed.append(f'Num="{current_num}"') current_num += 1 last_pos = item.end() # 把文件最后一段没匹配到的内容补上 processed.append(file_content[last_pos:]) # 把处理完的内容写回编辑区 editor.setText(''.join(processed)) editor.endUndoAction()
- 执行替换操作
先在Notepad++里打开你要处理的XML文件,务必备份一份原文件留底,避免意外。之后点击顶部菜单栏「插件」→「PythonScript」→「Scripts」,找到你刚才保存的poi_replace脚本点击,1秒内就能完成所有替换。
- 执行替换操作
校验规则:处理完成后你可以抽查任意
节点:节点内第一个原本是 Num="-1"的Poi标签会被替换为Num="9",第二个替换为Num="10",依次递增;遇到下一个开头的节点,计数会自动重置为9重新开始,完全匹配你的需求。如果效果不对,直接按 Ctrl+Z就能撤销所有修改回到原文件状态。
内容的提问来源于stack exchange,提问作者iv0
相关产品推荐
相关产品推荐

