替换标签名称,同时保持其余名称不变

时间:2019-02-06 15:45:50

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

首先,我想说我是regex的新手,我已经花了很多时间尝试使用教程,在线文档等来解决这个问题。在这里,我也经历了建议的答案。 / p>

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

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

我需要做的是用COUNTY替换NAME,其余的保持不变,包括正确的县名:

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

我使用以下“查找”找到了我想要更改的所有行,并成功完成了。

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

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

我希望我已经对此进行了解释,以便可以理解。谢谢保罗

2 个答案:

答案 0 :(得分:2)

您需要在替换字段中将capturing groupsbackreferences一起使用:

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

请参见regex demo

根据regular-expressions.info:

  

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

     

如果您的正则表达式具有namednumbered capturing groups,则可以在替换文本中重新插入与任何捕获组匹配的文本。您的替换文本可以引用任意多个组,甚至可以多次引用同一组。这样就可以用许多不同的方式重新排列与正则表达式匹配的文本。

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

答案 1 :(得分:0)

您真的不想使用正则表达式来完成这项工作。了解XSLT。

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