Ruby或正则表达式可以去除多余的换行符

时间:2010-09-25 17:54:23

标签: ruby regex line-breaks

你怎么会这样:

Dear Fred



How are you?






Regards
John

进入这个:

Dear Fred

How are you?

Regards
John

注意:允许单次和双次休息,但不得超过。例如,我们想要从:

"Dear Fred\n\n\n\nHow are you?\n\n\n\n\n\n\nRegards\nJohn"

"Dear Fred\n\nHow are you?\n\nRegards\nJohn"

但也应该适用于“\ r \ n”。

3 个答案:

答案 0 :(得分:2)

替换

(\r\n|\n|\r)\1+

\1

\1指的是反向引用。在红宝石中,我相信它们是通过$1完成的。

答案 1 :(得分:2)

这样的东西?

s.gsub /(\r?\n){3,}/, '\1\1'

似乎至少可以使用您的示例:

irb(main):060:0> s
=> "Dear Fred\n\n\n\nHow are you?\n\n\n\n\n\n\nRegards\nJohn"
irb(main):061:0> s.gsub /(\r?\n){3,}/, '\1\1'
=> "Dear Fred\n\nHow are you?\n\nRegards\nJohn"

答案 2 :(得分:1)

str.gsub!(/\n{3,}/, "\n\n")
str.gsub!(/(\r\n){3,}/, "\r\n\r\n")

正则表达式/ \ n {3,} /搜索3个或更多连续的换行符(\ n)。这些被2个换行符替换。 重复\ r \ n。

["\n", "\r\n"].each{|lb| str.gsub!( /(#{lb}){3,}/, lb*2 )}

是否相同。