Rubyで書かれたスクリプトがあります。重複する改行を削除する必要があります(例)
\n
\n
\n
に
\n
私の現在の試みは使用して(またはむしろ)うまくいかなかった
str.gsub!(/\n\n/, "\n")
これにより、出力に変化はありませんでした。何が悪いのですか?
これは私にとってはうまくいきます:
#!/usr/bin/Ruby
$s = "foo\n\n\nbar\nbaz\n\n\nquux";
puts $s
$s.gsub!(/[\n]+/, "\n");
puts $s
より慣用的なString#squeeze
の代わりにgsub
。
str = "a\n\n\nb\n\n\n\n\n\nc"
str.squeeze("\n") # => "a\nb\nc"
行を分割して再結合するだけで、望ましい結果が得られます
>> "one\ntwo\n\nthree\n".split.join("\n")
=> "one\ntwo\nthree"
編集:私はこれがすべての空白の部分文字列を改行で置き換えることに気づきました、例えば.
>> "one two three\n".split.join("\n")
=> "one\ntwo\nthree"
まず、これが必要なものであることを確認してください。
/\n\n\n /、 "\ n"が上記の質問で望んでいるように見えてはいけません。
また、Windowsの改行「\ r\n」を実行していないのですか?
編集:追加情報
コメントごと
「改行の数は変わる可能性があります。行ごとに2〜5個の改行があります。」
あなたが2-5行をヒットしたいだけならこれを試してください
/\n{2,5}/, "\n"
複数の改行を無制限に一致させる必要があります。コード例は、マイナーなTweakで動作します。
str.gsub!(/\n+/, "\n")
例えば:
str = "this\n\n\nis\n\n\n\n\na\ntest"
str.gsub!(/\n+/, "\n") # => "this\nis\na\ntest"
Splitを呼び出すだけでも、すべての空白が削除されます。
分割するには\n
を渡す必要があります
>> "one ok \ntwo\n\nthree\n".split(/\n+/).join("\n")
=> "one ok \ntwo\nthree"
さらに、以下でも動作します
str.gsub!/\ n ^\s *\n /、「\ n\n」
どこ、