1

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

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

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

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

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

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

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

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

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

4

2 回答 2

2

您需要在替换字段中使用带有反向引用的捕获组:

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

查看正则表达式演示

根据正则表达式.info:

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

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

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

于 2019-02-06T19:12:00.150 回答
0

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

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

于 2019-02-06T21:24:08.250 回答