2016-10-08 2 views
0

私はこのようなXMLファイルに欠落している比類のないverseタグを修正するプロセスを簡素化しようとしている:のRegex ++

<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> 

私が使用したいです任意の数の空白で始まる行の末尾を見つけるには++を正規表現にしてください。<verseしかし、最後には終わりません。</verse>

行末が一致すれば、私はnotepad ++ find/replaceを使ってタグが紛失しています。

ここ

は、私はそれは、スペースで始まり、行の最後のマッチング<verse

^(+<verse).* 
+0

質問のタイトルは<と>は '<' and '>' – gdwvcd

+0

に置き換える必要がありますあなたが追加しますか欠けている終わりの詩のタグ? – Bohemian

+0

最終行の ''は維持する必要がありますか? – trincot

答えて

1

これは可能性があり、あなたは何を探して:

検索:(^\h+<verse(?!.*verse>\h*).*?)((</.*?>\h*)*)$
は交換してください:$1</verse>$2

を、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> 
+0

マッチしたグループを参照する驚くべき解決策。残念ながら、@ボヘミアンからの解決策ほど理解しにくいものではありません。私はそれを受け入れました。しかし、より柔軟性があり、場所を決めるタグが ''以外のものになる可能性があります。 – gdwvcd

+0

ようこそ。実際には構文はちょっと混乱していました。なぜなら、実際には不要な「<' and '>」文字をエスケープしたからです(私はこれを今更新しました)。 '\ h'はスペースだけでなく、タブや非改行スペース(改行ではなく「水平」のままの空白)を表します。 – trincot

1

はできませんが、全体を一致させることができます(残念ながら、行全体)すべての行にマッチした、これまで持っているものです行と不足して終了タグとそれを元に戻すには:

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

@gdw FY:アウトオブプレース終了タグを*任意の*非詩タグと一致するように変更しました。 – Bohemian