我有一个用ruby编写的脚本。我需要删除任何重复的换行符(例如)
\n
\n
\n
到
\n
我当前的尝试使用
工作(或者更确切地说)str.gsub!(/\n\n/, "\n")
这让我对输出没有任何改变。我做错了什么?
答案 0 :(得分:32)
这对我有用:
#!/usr/bin/ruby
$s = "foo\n\n\nbar\nbaz\n\n\nquux";
puts $s
$s.gsub!(/[\n]+/, "\n");
puts $s
答案 1 :(得分:10)
使用更加惯用的String#squeeze
代替gsub
。
str = "a\n\n\nb\n\n\n\n\n\nc"
str.squeeze("\n") # => "a\nb\nc"
答案 2 :(得分:6)
简单地拆分和重新组合线将得到所需的结果
>> "one\ntwo\n\nthree\n".split.join("\n")
=> "one\ntwo\nthree"
编辑:我刚注意到这将用换行替换所有空格子串,例如
>> "one two three\n".split.join("\n")
=> "one\ntwo\nthree"
首先检查这是你想要的!
答案 3 :(得分:5)
您需要将多个换行符匹配到无限量。您的代码示例仅适用于一个小调整:
str.gsub!(/\n+/, "\n")
例如:
str = "this\n\n\nis\n\n\n\n\na\ntest"
str.gsub!(/\n+/, "\n") # => "this\nis\na\ntest"
答案 4 :(得分:4)
你确定它不应该是/ \ n \ n \ n /,“\ n”你在上面的问题中似乎想要的东西。
另外,你确定它没有做一个Windows新行“\ r \ n”?
编辑:其他信息
每条评论
“换行的数量可以改变。不同的行有2到5个换行符。”
如果你只想打2-5行试试这个
/\n{2,5}/, "\n"
答案 5 :(得分:1)
简单地调用split也会删除所有空格。
您需要将\n
传递给分割
>> "one ok \ntwo\n\nthree\n".split(/\n+/).join("\n")
=> "one ok \ntwo\nthree"
答案 6 :(得分:1)
此外,还可以使用
str.gsub! / \ n ^ \ s * \ n /,“\ n \ n”
其中,
答案 7 :(得分:-1)
试试这个适合我:
s = test\n\n\nbar\n\n\nfooo
s.gsub("\n\n", '')
答案 8 :(得分:-2)