我在替换 Sumbilme Text 中多个 xml 标签中的正则表达式结果时遇到问题。
我在不同的组中<startDate>
了带有多个标签的 xml 代码,如下所示:
<group1>
<id>123</id>
<startDate>2011-11-11</startDate>
<city>New York</city>
.
.
</group1>
<group2>
<id>456</id>
<startDate>2013-10-01</startDate>
<classCode>123</classCode>
.
.
</group2>
<group1>
<id>789</id>
<startDate>2016-01-17</startDate>
<city>Washington</city>
.
.
</group1>
<group2>
<id>135</id>
<startDate>2013-12-22</startDate>
<classCode>234</classCode>
.
.
</group2>
我只想在<group2>
中替换每个标签<startDate>(...some date...)</startDate>
以<startDate1>(...some date...)</startDate1>
括号中的文本 (...某个日期...是不同的。
我开始找到这个标签,我使用了这个代码:
(?=.*<startDate>)(?=.*</startDate>
<classCode>)
它有效。崇高在<group2>
中找到了每一个标签<startDate>(...some date...)</startDate>
。但是我在替换已建立的标签中的文本时遇到问题。
我试图将此代码放入"替换"行中:
(?=.*<startDate1>)(?=.*</startDate1>
<classCode>)
它没有用。
所以我找到了另一种选择。
在"查找"行中,我输入:
(?=.*(<startDate)(>))(?=.*(</startDate)(>
<classCode>))
在"替换"行中:
$1 1 $2 $3 1 $4
但结果是:
.
.
</group1>
<group2>
<id>456</id>
<startDate 1 > </startDate 1 >
<classCode><startDate 1 > </startDate 1 >
<classCode><startDate 1 > </startDate 1 >
<classCode><startDate 1 > </startDate 1 >
<classCode><startDate 1 > </startDate 1 >
<classCode><startDate 1 > </startDate 1 >
<classCode><startDate 1 > </startDate 1 >
<classCode><startDate 1 > </startDate 1 >
<classCode><startDate 1 > </startDate 1 >
<classCode><startDate 1 > </startDate 1 >
<classCode><startDate 1 > </startDate 1 >
<classCode><startDate>2015-11-02</startDate>
<classCode>123</classCode>
所以我的目标标签没有改变,但添加了新的标签......
我希望得到这个结果:
<group1>
<id>123</id>
<startDate>2011-11-11</startDate>
<city>New York</city>
.
.
</group1>
<group2>
<id>456</id>
<startDate1>2013-10-01</startDate1>
<classCode>123</classCode>
.
.
</group2>
有没有办法不手动替换标签名称?
像这样的东西?
<startDate>([d-]+)</startDate>(?=s*<classCode>)
替换为:
<startDate1>$1</startDate1>
在这里测试
我尝试搜索这个:(</?)startDate>
并替换为1startDate1>
.
这看起来太简单了。你能给我看一个可以欺骗这个正则表达式的输入吗?
更新
根据更新的问题,这就是我可以想到的:
正则表达式:(?s)startDate>((?:.(?!/group[013456789]))*)(?=/group2)
替换:startDate1>1
您必须运行"全部替换"两次才能替换每个必需的标记。我正在检查我是否可以让它只运行一次。
另外,让我建议使用 XSLT 来完成此类任务。