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

Regex新手求助:如何删除undo语句及其前置XML标签

解决XML脚本中删除Undo及前序标签的正则方案

嘿,作为正则新手能自己拼凑出满足需求的表达式已经很棒了!针对你要删除<undo>标签和它紧邻前一个XML标签的需求,我来给你一套实用的正则方案,专门适配你这种绘图软件导出的平级步骤XML场景。

核心思路

你的XML脚本里的绘图步骤和undo操作应该都是平级的独立标签(没有嵌套),所以用正则完全可以精准处理。我们的目标是匹配到任意一个完整的XML标签,加上它后面紧跟着的<undo>标签(不管是自闭合还是带内容的),然后把这一对都替换掉。

分场景的正则表达式

场景1:每个标签单独占一行(最常见情况)

如果你的XML导出格式是每行一个标签,比如:

<drawStep id="1">...</drawStep>
<undo/>
<drawStep id="2">...</drawStep>
<undo>undo step 2</undo>

用这个正则(记得开启编辑器的正则表达式模式,比如VS Code里勾选替换面板的.*图标):

^(.*<[^>]+>)\s*^<undo[^>]*>(?:.*?</undo>)?$

将「替换为」框留空,直接执行替换即可。

各部分解释:

  • ^:匹配一行的开头
  • (.*<[^>]+>):捕获前一行的完整XML标签(不管标签名是什么,只要是合法的XML标签结构)
  • \s*:匹配两行之间的所有空白(换行、空格、制表符都包含在内)
  • ^<undo[^>]*>:匹配undo标签的开头部分
  • (?:.*?</undo>)?:可选匹配undo标签的闭合部分(适配带内容的<undo>...</undo>格式,?:表示非捕获组,不额外保存匹配内容)
  • $:匹配一行的结尾

场景2:标签可能挤在同一行(少见但防万一)

如果你的XML偶尔出现标签在同一行的情况,用这个正则(需要开启单行模式,让.可以匹配换行符):

(<[^>]+>[^<]*)</?undo[^>]*>(?:</undo>)?

同样替换为空字符串即可。

操作示例(以VS Code为例)

  1. 打开你的XML脚本文件
  2. 按下Ctrl+H(Windows)/Cmd+H(Mac)打开替换面板
  3. 点击面板右侧的.*图标开启正则模式
  4. 把对应场景的正则表达式粘贴到「查找内容」框
  5. 「替换为」框保持空白
  6. 点击「全部替换」,就能批量清理掉所有不必要的撤销操作对了!

注意事项

  • 这个方案只适用于平级无嵌套的XML结构,你的绘图步骤脚本刚好符合这个情况,完全不用担心出错;如果是复杂嵌套的XML,正则就不太适合了,但你不用考虑这种情况~
  • 建议先截取一小段脚本测试替换效果,确认没问题后再批量操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:23:35