如果您只想查看问题并提供快速解决方案,请跳过第一段,第一段只是我试图了解此问题的背景。
在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]
如果这是有道理的。
任何帮助都将不胜感激。
答案 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