とっちゃん@nyanco! です。
今回は同じ内容の行が連続で続くテキストを1行に置換する正規表現の「検索文字列」と「置換文字列」についてというお話です。
ニッチなニーズですが知っておくと役に立つかもですにゃ~
正規表現でやりたいこと
まずは本記事でやりたいことの解説から。
▼以下の赤字部分のように同じ内容の行が連続で続くテキストがあったとします。
吾輩は猫である。名前はまだない。
吾輩は猫である。名前はまだない。
どこで生れたか頓と見当がつかぬ。何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。吾輩はここで始めて人間というものを見た。しかもあとで聞くとそれは書生という人間中で一番獰悪な種族であったそうだ。
▼上記の赤字2行を下記のように1行に検索置換する!というのが本記事の趣旨です。
吾輩は猫である。名前はまだない。
どこで生れたか頓と見当がつかぬ。何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。吾輩はここで始めて人間というものを見た。しかもあとで聞くとそれは書生という人間中で一番獰悪な種族であったそうだ。
同じ内容の行が連続で続くテキストを1行に置換する正規表現
それでは早速ですが正規表現の「検索文字列」と「置換文字列」はこちら。
検索文字列
(^.+\n)\1
解説
( ) … グループ化とキャプチャを行うための括弧。例の場合、改行(\n)が1つ含まれているので1行となる
\1 … ()でグループ化した文字列と同じ文字列を参照
以上で、グループ化をした文字列と同じ内容の行が連続する2行にマッチする正規表現となります。
ちなみに末尾の「\1」を増やせば以下のように2行以上の連続する行にマッチさせることもできます。
(^.+\n)\1\1…同じ内容が連続する3行にマッチ
(^.+\n)\1\1\1…同じ内容が連続する4行にマッチ
置換文字列
\1
解説
\1 … キャプチャした1番目の文字列(今回で言うと1行目の文字列)を呼び出す ※テキストエディタによっては【$1】と書く場合もあります
以上で、同じ内容の2行を1行に置換するという正規表現となります。
おわりに
本記事がどなたかの参考になれば幸いです。
今回は以上となります。
最後まで読んでいただきましてありがとうございました!
それではまた〜✧٩(ˊωˋ*)و✧
コメント