如何使用Ruby使用一个换行连续替换多行换行符

时间:2009-03-31 13:26:47

标签: ruby regex newline

我有一个用ruby编写的脚本。我需要删除任何重复的换行符(例如)

\n
\n
\n

\n

我当前的尝试使用

工作(或者更确切地说)
str.gsub!(/\n\n/, "\n")

这让我对输出没有任何改变。我做错了什么?

9 个答案:

答案 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)

此外,还可以使用

    空白行
  • 空格
  • n背靠背空白行数
  

str.gsub! / \ n ^ \ s * \ n /,“\ n \ n”

其中,

  • \ n当然是新行
  • \ s是空间
  • 表示在\ s
  • 之后使用时的一个或多个空格

答案 7 :(得分:-1)

试试这个适合我:

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

s.gsub("\n\n", '')

答案 8 :(得分:-2)

Ruby需要以不同于您提供的方式转义反斜杠。

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

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