【问题标题】:Ruby or regex to strip excess line breaksRuby 或正则表达式去除多余的换行符
【发布时间】:2011-04-17 05:30:40
【问题描述】:

你会怎么转:

亲爱的弗雷德 你好吗? 问候 约翰

进入这个:

亲爱的弗雷德 你好吗? 问候 约翰

注意:允许单次和两次中断,但仅此而已。例如,我们想从:

“亲爱的 Fred\n\n\n\n你好吗?\n\n\n\n\n\n\n问候\nJohn”
“亲爱的弗雷德\n\n你好吗?\n\n问候\n约翰”

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

【问题讨论】:

  • 对我来说,在尝试处理各种类型的换行符时会遇到麻烦。

标签: ruby regex line-breaks


【解决方案1】:

这样的?

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】:

    替换

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

    \1
    

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

    【讨论】:

    • 那不是只有一次中断吗?
    • @Franky:在我测试它的时候没有。适合你吗?
    【解决方案3】:
    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 )}
    

    也一样。

    【讨论】:

      猜你喜欢
      • 2015-08-19
      • 1970-01-01
      • 1970-01-01
      • 2011-02-14
      • 2019-06-21
      • 1970-01-01
      • 2011-07-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多