我有一个用 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"
你确定它不应该是 /\n\n\n/, "\n" 你在上面的问题中似乎想要的东西。
另外,你确定它不是在做 Windows 换行符“\r\n”吗?
编辑:附加信息
每条评论
“换行的数量可以改变。不同的行有 2 到 5 个换行。”
如果你只想打 2-5 行试试这个
/\n{2,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"
简单地拆分和重新组合线条将产生所需的结果
>> "one\ntwo\n\nthree\n".split.join("\n")
=> "one\ntwo\nthree"
编辑:我只是注意到这将用换行符替换所有空白子字符串,例如
>> "one two three\n".split.join("\n")
=> "one\ntwo\nthree"
首先检查这是否是您想要的!
简单地调用 split 也会删除你所有的空白。
您需要通过\n
拆分
>> "one ok \ntwo\n\nthree\n".split(/\n+/).join("\n")
=> "one ok \ntwo\nthree"
此外,还适用于
str.gsub!/\n^\s*\n/, "\n\n"
在哪里,
试试这个它对我有用:
s = test\n\n\nbar\n\n\nfooo
s.gsub("\n\n", '')