• ベストアンサー

【Ruby】改行挿入 文字列操作

以下の様な文字列を <div>xxx</div>yy<span>zzz</span> 以下の様に編集したいです。 <div>xxx</div> yy <span>zzz</span> htmlのタグ毎に改行を挿入したいのです。 もしも上記例でyyがなければ以下の様に書くのですが、 require 'drb/drb' puts DATA.read.scan(/(<.+?>.+?<\/.+?>)/).join("\n") __END__ <div>xxx</div>yy<span>zzz</span> 以上、よろしくご指導の程、お願い申し上げます。

質問者が選んだベストアンサー

  • ベストアンサー
  • ki073
  • ベストアンサー率77% (491/634)
回答No.2

最近マニュアルを見ていたら、splitでこのようなことができる事に気づきました。 こんなのはどうですか。 puts DATA.read.chomp.split(/(<.+?>.+?<\/.+?>)/).reject{|a| a==""}.join("\n") もう少し縮めて puts DATA.read.chomp.split(/(<.+?>.+?<\/.+?>)/).reject{|a| a==""} もできるみたいです。 もうひとつおまけですが、\を使うのがいやな場合は puts DATA.read.chomp.split(%r[(<.+?>.+?</.+?>)]).reject{|a| a==""} のような書き方も

kingfruits
質問者

お礼

ki073さん、ご回答有り難うございました。 とても参考になりました。

その他の回答 (1)

  • ki073
  • ベストアンサー率77% (491/634)
回答No.1

scan部分を split(/(<.+?>.+?<\/.+?>)/) にします。()で囲むのがミソです。

kingfruits
質問者

補足

ki073さん、ご回答有り難うございます。 なるほど!! 素晴らしい!! 頭イイ!! しかし、一行目と最終行に空行が入っちゃいますね。 最終行はchompを加えれば消えますが一行目を消そうと思い、以下の様に書いてみました。 puts DATA.read.chomp.split(/(<.+?>.+?<\/.+?>)/).inject([]){|array,i| array<<i if i!=''; array }.join("\n") なんか、仰々しくなってしまいました。。。 もう少しスマートな方法とかないでしょうか?? ライブラリを使った解でもかまいません。

関連するQ&A