• ベストアンサー

【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> 以上、よろしくご指導の程、お願い申し上げます。

  • Ruby
  • 回答数2
  • ありがとう数1

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

  • ベストアンサー
  • 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

  • RSS::Parserで取り出した要素と文字列の連結

    以下のサンプルを改造し ----------------------------------------------------- ENTRIES = 5 require 'uri' require 'open-uri' require 'rss' uri = URI.parse('http://b.hatena.ne.jp/entrylist?mode=rss&sort=hot&threshold=3') rss = RSS::Parser.parse(uri.read) rss.output_encoding = 'Shift_JIS' bookmarks = [] rss.items.each do |i| bookmarks.push([i.title, i.link]) end puts "■はてなブックマーク 最近の注目エントリ #{ENTRIES}件" puts puts bookmarks[0, ENTRIES].map {|i| i.join("\n") }.join("\n\n") ----------------------------------------------------- rdfファイルを加工するスクリプトを作成してみましたが エラーが出てしまいます。 エラーメッセージ ----------------------------------------------------- rss.rb:27: undefined method `join' for "Sun, 25 Jan 2009 02:51:06 +0900":String (NoMethodError) from rss.rb:26:in `each' from rss.rb:26 ----------------------------------------------------- サンプルを改造したもの ----------------------------------------------------- ENTRIES = 5 require 'uri' require 'open-uri' require 'rss' uri = URI.parse('honyarara.rdf') rss = RSS::Parser.parse(uri.read) rss.output_encoding = 'Shift_JIS' titles = [] links = [] dates = []#空の配列を生成 rssdata = "" rss.items.each do |i| titles.push([i.title])#pushは配列に要素を加えると言う意味 links.push([i.link]) dates.push([i.date]) end puts "\n\n" for i in 0...5 rssdata += dates[i].join("<a href='").join(links[i]).join("'>").join(titles[i]).join("</a>").join("\n") end puts "\n\n" puts rssdata ----------------------------------------------------- ほかに【.join】の部分を【+】にしてみたり 色々試してみましたがうまくいきませんでした。 rdfの要素を取り出しHTML形式で書き出したいのですが 【↓このような形にして変数に格納したい】 ----------------------------------------------------- 2009/10/17<a href="​http://foo.bar.com/article/2">​使い方難しい。</a>\n 2009/10/18<a href="​http://foo.bar.com/article/3">​使い方難しい2。</a> ----------------------------------------------------- rdfの要素と文字列の連結方法がわかりません。 宜しくお願いします。

    • ベストアンサー
    • Ruby
  • UNIXコマンドのjoinについて

    -------------- -------------- 1 XX XXX 1 xx xxx 2 YY YYY 2 yy yyy 3 ZZ ZZZ  3 zz zzz ~      ~ -------------- -------------- UNIXコマンドのjoinを用いて上の二つのファイルを結合させ、 ---------------------- 1 XX XXX xx xxx 2 YY YYY yy yyy 3 ZZ ZZZ zz zzz ~ ---------------------- としたかったのですが、一列目の数字が急に変化するとそれ以降の行が出力されなくなります。(例えば、100の次が1000になった時など) どのようしたらこのような事が防げるのでしょうか? もしjoinでは防げないなら、joinのように2つのファイルの1列目の数字が同じだった時に結合して出力してくれるプログラムを書ける方がいたら教えていただきたいです。 perlかC++だと助かります。よろしくお願いします。

  • rubyで変数から指定したバイト読むには?

    たとえば、 Class Hoge initialize(arg)  @data=arg end def read(size)  @dataからsize分読んで返す。 end end みたいなクラスを hoge=Hoge.new(aaa) puts hoge.read(1024) puts hoge.read(1024) みたいに使いたいです。 指定したバイト分読むってどうするんですか? ご教授の程、宜しくお願いいたします。

    • ベストアンサー
    • Ruby
  • タグを変えずに改行をなくすにはどうすればいいでし

    cssを何も設定してない状態で <p>aaa</p><div>bbb</div> <span>aaa</span><div>bbb</div> とすると、 ******************** aaa bbb aaa bbb ******************** となってしまいます。 理想は、 ******************** aaabbb aaabbb ******************** です。 <div> の前は必ず開業になってしまうのでしょうか? タグを変えずに改行をなくすにはどうすればいいでしょうか?

    • ベストアンサー
    • HTML
  • <li>の横並びで、<span>のところで改行

    <li>をfloatで横並びにした場合、IE7のみ、<span>のところで改行されてしまい、最後の部分だけ以下のようになります。 ddd ( xx x ) IE8やそれ以外のブラウザは<li>のところで改行され、以下のようになります。 aaa ( xxx ) bbb ( xxx ) ccc( xxx ) ddd ( xxx ) どのようにすれば、IE7も<li>のところで改行され他と同じようになりますか。 実際にはaaa,bbb,xxxの文字などはもっと長いものでたまたま画面右端ぎりぎりにdddまで表示され</span>が区切りになって( xxx )の部分がddd下部に縦に3段くらいで表示されます。 IE8や、他のブラウザは、ddd ( xxx ) がセットで画面に収まらないので、<li>でおりかえされており、このようになってほしいのですが。 よろしくお願い致します。 <ul class="list"> <li><a href="a.html"><span style="color: #cccc99">aaa</span> ( xxx )</a></li> <li><a href="b.html"><span style="color: #cccc99">bbb</span> ( xxx )</a></li> <li><a href="c.html"><span style="color: #cccc99">ccc</span> ( xxx )</a></li> <li><a href="d.html"><span style="color: #cccc99">ddd</span> ( xxx )</a></li> </ul><div style="clear: left;"></div> ul.list{ list-style:none; width:100%; margin: 0 0 .8em 0; padding: 0; } ul.list li { float:left; display: inline; margin-right:.7em; }

    • ベストアンサー
    • HTML
  • Ruby WEBrick cgiからgifが最後まで送れない。

    以下のようなHTTPサーバをWinXp上で動かしました。 #$ruby = "C:/ruby/bin/ruby.exe" require 'webrick' srv = WEBrick::HTTPServer.new({ :BindAddress => 'xxx.xxx.xxx.xxx', :CGIInterpreter => "c:/ruby/bin/ruby.exe", :Port => 80 }) srv.mount("/", WEBrick::HTTPServlet::FileHandler, "./", {:FancyIndexing=>true}) srv.start そして、以下のようなCGIをよびます。 #!/usr/bin/ruby STDOUT.binmode open("hoge.gif", "r") do |f| f.binmode body = f.read puts "content-type: image/gif" puts "content-length: #{body.size.to_s}" puts "" print body end すると、content-length分のHTTPボディーが送られてきません。 2種類のgifで試しましたが、193byte/724byte、289byte/451byteでした。 バージョンは、ruby 1.8.6、WEBrick 1.3.1です。 何が原因でしょうか?

  • 文字列の<>で囲まれた文字列を一括削除する方法

    サイトのソースで、本文に<br>、</div>などのHTMLタグが挿入されていますが、 これらのタグを一括して削除する方法はないでしょうか。 私が最初に試したのは、ソースをメモ帳に張り付けて、置換機能を利用して ワイルドカードを使い、<*>の文字列を空白に置き換える方法ですが、 上記のようなタグがあるにも関わらず、該当する文字列がないと エラー表示され置換できません。 具体的には、以下のように編集したいです。 (置換前) <div class="t_h ">7: <span style="color: green; font-weight: bold;">名無しさん</span> <span style="color: gray;"> 2013/09/26(木) 15:55:59.62 ID:FahaifvL0</span></div> <div class="t_b " > 山田太郎だったら営業に有利そうだな </div><br /> (置換後) 7: 名無しさん2013/09/26(木) 15:55:59.62 ID:FahaifvL0 山田太郎だったら営業に有利そうだな どなたかいい方法を教えていただけますでしょうか。 よろしくお願いします。

  • CSVファイルの""内コンマの処理

    以下のようなCSVファイルがあります。 xxx,yyy,"z,zz",XXX,"YY,Y",ZZZ,111,222 これを、 xxx,yyy,zzz,XXX,YYY,ZZZ,111,222 の様にperlで ""内のコンマを取りたいのですが、どうしたらよいでしょうか? xxx,yyy,z zz,XXX,YY Y,ZZZ,111,222 の様に""内コンマを別の文字に置き換えても可です。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • JavaScriptを用いた文字列置換

    JavaScriptを用いて、以下のようなことが可能でしょうか。 <div class="test"> <A Href="http://xxx"> <Img Src="hoge.gif"> </A></div> 上記タグを下記タグに置換したいです。 <div class="test"> <Img Src="hoge.gif"> </div> ようはAタグを丸々削除したいのですが、JavaScriptで可能でしょうか。 お分かりの方お教え下さい。

  • htmlの改行要素をできるだけ教えてください

    自分の知る、改行するhtmlタグは以下の2つ br div cssは display:block white-space このぐらいしか知りません 他にありますでしょうか?

    • ベストアンサー
    • HTML