正则表达式在记事本++中查找和修复不匹配的xml结束标记

时间:2016-10-08 20:16:36

标签: regex xml notepad++

我正在尝试简化纠正xml文件中缺少的不匹配verse标记的过程,如下所示:

    <verse number="21">words words words asdlkjf alsdf. </verse>
    <verse number="22">words words words arbitrary words. 
      <verse number="23">more arbitrary text.</verse>
      <verse number="23">other arbitrary words. </chapter>

我想在notepad ++中使用正则表达式来查找以任意数量的空格开头的行的结尾<verse但不以</verse>结尾

在匹配行的末尾,我应该能够使用notepad ++ find / replace来重新添加缺少的标记。

这是我到目前为止所做的,它匹配以空格开头的每一行(不幸的是整行)<verse

^( +<verse).*

2 个答案:

答案 0 :(得分:1)

无法匹配行尾,但您可以匹配整行,并将其与缺少的结束标记一起放回:

Find: ^ *<verse>(.(?!</verse>))*(</\w*>)?$
Repl: $0</verse>$1

答案 1 :(得分:1)

这可能就是你要找的东西:

查找: (^\h+<verse(?!.*verse>\h*).*?)((</.*?>\h*)*)$
替换: $1</verse>$2

鉴于样本数据,它将进行两次替换,结果如下:

    <verse number="21">words words words asdlkjf alsdf. </verse>
    <verse number="22">words words words arbitrary words. </verse>
      <verse number="23">more arbitrary text.</verse>
      <verse number="23">other arbitrary words. </verse></chapter>