在记事本中查找/替换正则表达式以重新排列和关闭xml元素

时间:2013-11-10 20:33:50

标签: xml regex expression notepad++

我有一个xml文件的完整facebook消息,其元素需要重新排列和关闭。结构如下所示:

<john>
   <timestamp>Tuesday, August 7, 2012 at 3:53pm EDT</timestamp>
   <message>Cats or dogs?</message>
<hillary>
   <timestamp>Sunday, August 8, 2012 at 1:54am EST</timestamp>
   <message>Ugh, definitely dogs.</message>

需要关闭<john><hillary>代码,并且需要交换<timestamp><message>元素:

<john>
   <message>Cats or dogs?</message>
   <timestamp>Tuesday, August 7, 2012 at 3:53pm EDT</timestamp>
</john>
<hillary>
   <message>Ugh, definitely dogs.</message>
   <timestamp>Sunday, August 8, 2012 at 1:54am EST</timestamp>
</hillary>

我是正则表达式的新手,对此我很难过。任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

你可以试试这个:

search  : (<([^>]+)>(?:\s+|<([^>]+)>[^<]*</\3>)+)(?=(\r?\n)|$)
replace : $1$4</$2>

如果需要,您可以更明确:

search  : (<([^>]+)>(?:\s+|<(timestamp|message)>[^<]*</\3>)+)(?=(\r?\n)|$)
replace : $1$4</$2>

将消息标记放在时间戳标记之前:

search  : (<message>[^<]*</message>)(\s*)(<timestamp>[^<]*</timestamp>)
replace : $3$2$1

答案 1 :(得分:0)

我为您here做了一个适用于任何名称的示例。

Search: /<(.*?>)(.*?</message>)/gs

Replace: <$1$2\n</$1