【问题标题】:Replace a Tag Name while keeping the rest as it is替换标签名称,同时保持其余部分不变
【发布时间】:2019-06-30 15:08:31
【问题描述】:

我想先说我是 regex 的新手,我已经花了相当多的时间尝试使用教程、在线文档等自己解决这个问题。我也在这里查看了建议的答案。

现在这是我的问题:我有 267 条这样的线路,每个县都不一样。

<SimpleData name="NAME">Angelina</SimpleData>

我需要做的是将 NAME 替换为 COUNTY 并保持其余部分相同,包括正确的县名:

<SimpleData name="COUNTY">Angelina</SimpleData>

我使用下面的 Find 找到了所有我想更改的行,并且成功了。

<SimpleData name="NAME">[\S\s\n]*?</SimpleData>

这可能不是最好的方法,但它确实有效。

我希望我已经解释了这一点,以便人们理解。谢谢,保罗

【问题讨论】:

  • 您只想用“COUNTY”替换“NAME”吗?如果是这样,您为什么要使用正则表达式,一个简单的“替换”就可以完成这项工作。
  • 搜索(&lt;SimpleData name=")NAME("&gt;[\S\s\n]*?&lt;/SimpleData&gt;)并替换为$1COUNTY$2
  • @UnkleBenz 是的,这是简单的解决方案,但我还有其他字符串,我也需要我要求的解决方案。谢谢
  • @WiktorStribiżew 您的解决方案很有效!谢谢你。我不确定如何将简单的评论标记为正确答案?
  • VSCode 是一个文本编辑器,无法访问代码,因此,How to change XML Attribute 不能用于关闭该帖子作为重复。

标签: regex xml visual-studio-code vscode-tasks find-replace


【解决方案1】:

您需要在替换字段中使用capturing groupsbackreferences

查找内容(&lt;SimpleData name=")NAME("&gt;[\S\s\n]*?&lt;/SimpleData&gt;)
替换为$1COUNTY$2

regex demo

根据正则表达式.info:

除了将正则表达式的一部分组合在一起之外,括号还创建了一个编号的捕获组。它将与正则表达式部分匹配的字符串部分存储在括号内。

如果您的正则表达式有namednumbered capturing groups,那么您可以在替换文本中重新插入与这些捕获组中的任何一个匹配的文本。您的替换文本可以引用任意数量的组,甚至可以多次引用同一个组。这使得以多种不同方式重新排列正则表达式匹配的文本成为可能。

请注意,在 VSCode 中,您不能使用命名组。

【讨论】:

    【解决方案2】:

    您真的不想在这项工作中使用正则表达式。学习 XSLT。

    任何使用正则表达式的尝试都会匹配它不应该匹配的东西,或者无法匹配它应该匹配的东西。这不是因为您缺乏正则表达式技能,而是因为计算机科学理论:XML 的语法是递归定义的,而正则表达式无法处理递归定义的语法。

    【讨论】:

      猜你喜欢
      • 2021-11-24
      • 1970-01-01
      • 1970-01-01
      • 2019-05-12
      • 1970-01-01
      • 1970-01-01
      • 2023-01-12
      • 2011-09-16
      • 2023-03-14
      相关资源
      最近更新 更多