Sublime text xml 替换正则表达式结果
Sublime text xml replace regex result
我在 Sumbilme Text 中替换正则表达式导致多个 xml 标签时遇到问题。
我有 xml 代码,在不同的组中有多个标签 <startDate>
,如下所示:
<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>
我想将每个标签 <startDate>(...some date...)</startDate>
替换为 <group2>
到 <startDate1>(...some date...)</startDate1>
括号中的文字(...某个日期...)不同。
我开始寻找这个标签并使用了这个代码:
(?=.*<startDate>)(?=.*</startDate>
<classCode>)
并且有效。 Sublime 在 <group2>
中找到了每个标签 <startDate>(...some date...)</startDate>
。
但是我在替换 founded 标签中的文本时遇到了问题。
我试图将此代码放入 'Replace' 行:
(?=.*<startDate1>)(?=.*</startDate1>
<classCode>)
没用。
所以我找到了另一个选择。
在 'Find' 行我输入:
(?=.*(<startDate)(>))(?=.*(</startDate)(>
<classCode>))
并且在 'Replace' 行中:
1 1
但结果是:
.
.
</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>
并替换为 startDate1>
。
这看起来太简单了。你能告诉我一个能骗过这个正则表达式的输入吗?
更新
根据更新后的问题,这是我能想到的:
正则表达式:(?s)startDate>((?:.(?!\/group[013456789]))*)(?=\/group2)
替换:startDate1>
您必须 运行 'Replace All' 两次才能替换每个必需的标签。我正在检查是否可以 运行 一次。
此外,让我为此类任务推荐 XSLT。
是这样的吗?
<startDate>([\d-]+)<\/startDate>(?=\s*<classCode>)
替换为:
<startDate1></startDate1>
测试一下here
我在 Sumbilme Text 中替换正则表达式导致多个 xml 标签时遇到问题。
我有 xml 代码,在不同的组中有多个标签 <startDate>
,如下所示:
<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>
我想将每个标签 <startDate>(...some date...)</startDate>
替换为 <group2>
到 <startDate1>(...some date...)</startDate1>
括号中的文字(...某个日期...)不同。
我开始寻找这个标签并使用了这个代码:
(?=.*<startDate>)(?=.*</startDate>
<classCode>)
并且有效。 Sublime 在 <group2>
中找到了每个标签 <startDate>(...some date...)</startDate>
。
但是我在替换 founded 标签中的文本时遇到了问题。
我试图将此代码放入 'Replace' 行:
(?=.*<startDate1>)(?=.*</startDate1>
<classCode>)
没用。
所以我找到了另一个选择。
在 'Find' 行我输入:
(?=.*(<startDate)(>))(?=.*(</startDate)(>
<classCode>))
并且在 'Replace' 行中:
1 1
但结果是:
.
.
</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>
并替换为 startDate1>
。
这看起来太简单了。你能告诉我一个能骗过这个正则表达式的输入吗?
更新
根据更新后的问题,这是我能想到的:
正则表达式:(?s)startDate>((?:.(?!\/group[013456789]))*)(?=\/group2)
替换:startDate1>
您必须 运行 'Replace All' 两次才能替换每个必需的标签。我正在检查是否可以 运行 一次。
此外,让我为此类任务推荐 XSLT。
是这样的吗?
<startDate>([\d-]+)<\/startDate>(?=\s*<classCode>)
替换为:
<startDate1></startDate1>
测试一下here