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

如何在VS Code中用正则表达式移除XML文件中的重复元素?

移除XML根节点下重复的带name属性元素

问题场景

有如下XML文件,根元素<item>下所有带name属性的子元素(如<array>)均重复出现两次:

<item>
    <array name="time_entries">
        <item>0</item>
        <item>10</item>
    </array>
    <array name="time_entries">
        <item>0</item>
        <item>10</item>
    </array>
    <array name="game_level">
        <item>0</item>
        <item>1</item>
        <item>2</item>
        <item>3</item>
    </array>
    <array name="game_level">
        <item>0</item>
        <item>1</item>
        <item>2</item>
        <item>3</item>
    </array>
</item>

现有尝试的问题

你之前使用的正则表达式<item name=".*">#...</item>存在两处核心问题:

  1. 目标重复元素是<array>而非<item>,正则匹配对象错误
  2. #...不是有效的正则通配语法,无法匹配元素内部的完整内容结构

正确的VS Code正则查找替换方案

  1. 打开VS Code的查找替换面板(快捷键Ctrl+H/Cmd+H),点击面板右侧的.*按钮开启正则表达式模式
  2. 查找框输入以下正则:
(<array name="([^"]+)">\s*(?:<item>[^<]+<\/item>\s*)+<\/array>)(\s*\1)
  1. 替换框输入:
$1
  1. 点击「替换全部」即可移除所有重复的<array>元素

正则逻辑说明

  • (<array name="([^"]+)">\s*(?:<item>[^<]+<\/item>\s*)+<\/array>):捕获第一个完整的<array>元素,匹配其name属性、内部的<item>子元素及所有空白/换行符
  • (\s*\1):匹配后续紧跟的空白/换行,以及和第一个捕获组完全相同的重复元素
  • 替换为$1即保留第一个元素,删除重复项

替换后的结果

<item>
    <array name="time_entries">
        <item>0</item>
        <item>10</item>
    </array>
    <array name="game_level">
        <item>0</item>
        <item>1</item>
        <item>2</item>
        <item>3</item>
    </array>
</item>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 14:05:55