Regex在记事本++;

Regex在记事本++;,regex,xml,notepad++,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>

我试图简化纠正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>
words asdlkjf alsdf。
武断的话。
更随意的文本。
其他武断的话。

我想使用notepad++中的正则表达式来查找以任意数量的空格开头的行尾,并且不可能与行尾匹配,但您可以匹配整行并将其与缺少的结束标记放回:

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

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

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

这可能就是您想要的:

查找:
(^\h+\h*)*?(\h*)*)$

替换:
$1$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>
words asdlkjf alsdf。
武断的话。
更随意的文本。
其他武断的话。

这可能就是您想要的:

查找:
(^\h+\h*)*?(\h*)*)$

替换:
$1$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>
words asdlkjf alsdf。
武断的话。
更随意的文本。
其他武断的话。

问题标题应具有,并替换为
是否要添加缺少的结尾韵文标记?是否需要保留最后一行中的
?@Bohemian是的,我想添加缺少的结尾标记@trincot是的,保留现有的
标记很重要。问题标题应该有,并替换为
是否要添加缺少的结尾韵文标记?是否需要保留最后一行中的
?@Bohemian是的,我想添加缺少的结尾标记@trincot是的,保留现有的
标签很重要。参考匹配组的奇妙解决方案;不幸的是,没有@Bohemian的解决方案那么容易理解;不过,我接受了它,因为它更灵活,不合适的结束标记可能不是
,不客气。实际上,语法有点混乱,因为我转义了
字符,这实际上是不需要的(我现在更新了它)。
\h
表示空格,但也表示制表符和非中断空格(任何不是新行但保持“水平”的空白)。参考匹配组的绝妙解决方案;不幸的是,没有@Bohemian的解决方案那么容易理解;不过,我接受了它,因为它更灵活,不合适的结束标记可能不是
,不客气。实际上,语法有点混乱,因为我转义了
字符,这实际上是不需要的(我现在更新了它)。
\h
表示空格,但也表示制表符和非分隔空格(任何不是新行但保持“水平”的空白)。@gdw FYI更改了不合适的结束标记以匹配任何非韵文标记。@gdw FYI更改了不合适的结束标记以匹配任何非韵文标记。