regex - Sublime Text xml替换正则表达式结果

标签 regex xml replace find sublimetext

我在替换 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 找到了 <startDate>(...some date...)</startDate> 中的每个标签 <group2> 。 但我在替换已创建标签中的文本时遇到问题。

我尝试将此代码放入“替换”行:

(?=.*<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>

测试一下 here

关于regex - Sublime Text xml替换正则表达式结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43279328/

相关文章:

php - 向/从服务器 cocos2d-x 发送/检索 xml 文件

sql - 在查询中返回 Null,而不是 NaN

regex - 解析具有接受空格的值的键值对

regex - 检查 AWK 中的大写字母,范围 [A-Z] 不起作用

java - Spring Jaxb2 : How to append batch data to XML file with no reading it to memory?

xml - 在 xslt 中不带命名空间的条件复制

linux - 如何执行递归文件内替换?

javascript - 用 Regex 替换方法 - 意外的输出日志记录匹配 $& 和 Group $1

regex - 如何将变量插入 Perl 6 正则表达式?

PHP 网页抓取