Notepad ++:复制文本部分值并用此值替换其他文本部分

时间:2015-09-19 01:20:58

标签: regex variables search replace notepad++

如果您只想查看问题并提供快速解决方案,请跳过第一段,第一段只是我试图了解此问题的背景。

在NP ++中使用RegEx已有一段时间了,但有一点我无法理解的是如何使用它来存储和利用“变量”。我一直试图理解它一段时间,这不是我第一次遇到这个问题,但在此之前,我总是放弃并采取某种解决方法来避免使用这些的东西。通过变量我的意思是可以使用像\ 1 \ 2等来存储和替换值的方式。我一直在阅读无数的SO线程,但我似乎无法得到它。所以我希望有人可以给我一个解决这个问题的方法,再加上一个解释RegEx正在做什么/它是如何运作的,所以我可以解决这个问题,也许最终可以解决这个问题。

所以我有一个文件,特别是我的iTunes Library XML文件,我想用一个字段的值替换另一个字段的值。例如,我有:

        <key>Play Date UTC</key><date>2040-02-05T21:28:16Z</date>
        <key>Release Date</key><date>2015-08-22T17:08:10Z</date>

我希望:

        <key>Play Date UTC</key><date>2015-08-22T17:08:10Z</date>
        <key>Release Date</key><date>2015-08-22T17:08:10Z</date>

即,将“播放日期UTC”的值替换为文件中多个项目的“发布日期”值。

我认为这样做的方法是,在pseduo-RegEx中,类似于:

搜索:

[Variable 1=]<key>Play Date UTC</key><date>[/Variable 1]
[Variable 2=]{Wildcard}[/Variable 2]
[Variable 3=]</date>{newline}<key>Release Date</key><date>[/Variable 3]
[Variable 4=]2015-08-22T17:08:10Z[/Variable 4]
[Variable 5=]</date>[/Variable 5]

替换:

[Variable 1][Variable 4][Variable 3][Variable 4][Variable 5]

如果这是有道理的。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

我会这样做:

找到:(<key>Play Date UTC</key><date>)[^<]+(</date>\s+<key>Release Date</key><date>([^>]+)</date>)
替换为:$1$3$2

<强>解释

(                                   : begin group 1
  <key>Play Date UTC</key><date>    : literally
)                                   : end group 2
[^<]+                               : every thing that is not <
(                                   : begin group 2
  </date>                           : literally
  \s+                               : 1 or more space char (including linebreak)
  <key>Release Date</key><date>     : literally
  ([^>]+)                           : group 3, every thing that is not < (ie the date)
  </date>                           : literally
)                                   : end group 2