2009-03-31 25 views

答えて

29

は、これが私の作品:

#!/usr/bin/ruby 

$s = "foo\n\n\nbar\nbaz\n\n\nquux"; 

puts $s 

$s.gsub!(/[\n]+/, "\n"); 

puts $s 
+1

なぜかっこはどうですか? –

+0

それは1年前だったので、私は分かりません。私はPerlで使っているものだから、\ n + /試してみることを期待しています。それはおそらく私が何か間違ったことをしたためです。 –

+0

私はs.gsub(/ \ n + /、 "\ n")が動作すると思います。少なくともそれは私のラップトップで動作します。 – swcai

4

あなたは上記の質問に欲しいと思われるものを\ n \ n \ n "、\ n"はしないでください。

また、新しい行「\ r \ n」を実行していないことは確かですか?

EDIT:追加情報

コメントパー

"改行の量は変更することができます別のラインは、2〜5改行を持っています。"

あなたは、単に分割とラインが望ましい結果に

>> "one\ntwo\n\nthree\n".split.join("\n") 
=> "one\ntwo\nthree" 

編集を与える再結合この

/\n{2,5}/, "\n" 
+0

。異なる行には2〜5行の改行があります。 – Macha

+1

「\ r \ n」の吹き出しに感謝します。それは価値があるのですが、Windowsだけではありません - LinuxボックスのRailsサイトにあるテキストエリア入力のデータを使用すると、この問題に遭遇しました。確かに、他の要素もデータに影響を与える可能性がありますが、その点はWindowsはその一つではないということです。 – DreadPirateShawn

+1

\ r \ nは完全に機能しました。完璧な解決策を見つけるために1.5時間を費やしました。ここにあります。ありがとう@ケン – sapatelbaps

6

を試してみてください2-5ラインをヒットする場合:私は、このことに気づいすべての空白部分文字列を改行で置き換えます。

>> "one two three\n".split.join("\n") 
=> "one\ntwo\nthree" 

最初にこれが欲しいものであることを確認してください。

+0

素敵な1つ - それを行うには素晴らしい方法です! – Brian

+0

ありがとう、私はこれを答えとして選択しましたが、それも私の場合は良くないスペースで分割することを認識しました。申し訳ありません。 – Macha

+0

あなたはそうです。あなたはstr.split(/ \ n + /)を使うことができましたが、Chasです。 Owensのソリューションは簡単です。 – finnw

-2

Rubyはバックスラッシュは、あなたが提供しているとは異なるエスケープ必要があります。

str.sub!("\\\\n+\\\\n","\\\\n") 

http://www.ruby-forum.com/topic/176239

1

単に呼び出すスプリットはまたあなたの空白のすべてをトリムします。

は、あなたは無限の量に複数の改行を一致させる必要がある

>> "one ok \ntwo\n\nthree\n".split(/\n+/).join("\n") 
=> "one ok \ntwo\nthree" 
5

分割する\nを渡す必要があります。例えば

str.gsub!(/\n+/, "\n") 

::あなたのコード例では、ちょうどマイナーな微調整していきます

str = "this\n\n\nis\n\n\n\n\na\ntest" 
str.gsub!(/\n+/, "\n") # => "this\nis\na\ntest" 
1

さらに、また、空白行に

  • スペースバックの
  • n個で動作します空白行を戻すには

str.gsub!/\ nは^ \ sの*の\ N /、 "\ nは\ n" は

  • \ nは
  • \ sはスペース
  • が1かを表しているコースの改行であります\ sの後に使用するとスペースが多くなります
+0

これはこのスレッドで最も正確な答えです。 –

+0

これらのどれも '\ r'文字には対応しません。 'str.gsub(/ [\ n \ r] +^\ s * [\ r \ n] + /" \ n \ n ")' – Dex

9

gsubの代わりにもっと慣用のString#squeezeを使用してください。

str = "a\n\n\nb\n\n\n\n\n\nc" 
str.squeeze("\n") # => "a\nb\nc" 
-1

それは私のために働いたこれを試してみてください。改行の量は変更することができ

s = test\n\n\nbar\n\n\nfooo 

s.gsub("\n\n", '') 
関連する問題