如何用“\ r \ n”拆分Ruby字符串?

时间:2011-05-12 06:29:11

标签: ruby string split

给出一个字符串:

s = "G o o d\r\nDay\r\n\r\n\r\nStack\r\n\r\nOverflow\r\n"

我想:

  • 将其拆分为(\r\n)+,即我希望得到:["G o o d", "Day", "Stack", "Overflow"]

    我试过s.split(/(\r\n)+/),但它没有给我预期的结果。

    为什么?我怎样才能得到预期的结果?

  • 获取数组中\r\n的数量,即预期结果为:[1,3,2]

    你会怎么做?

我使用Ruby 1.9.2。

5 个答案:

答案 0 :(得分:9)

差不多,试试这个:

s.split /[\r\n]+/
s.scan(/[\r\n]+/).map { |e| e.size/2 }

这给出了[1,3,2,1]这可能是“真正的”答案。但除此之外,s.chomp.scan...会给[1,3,2]

答案 1 :(得分:8)

以下是我如何去做的事情:

s = "G o o d\r\nDay\r\n\r\n\r\nStack\r\n\r\nOverflow\r\n"

s.split(/[\r\n]+/) # => ["G o o d", "Day", "Stack", "Overflow"]

答案 2 :(得分:3)

您希望按/[\r\n]+/

进行拆分
"G o o d\r\nDay\r\n\r\n\r\nStack\r\n\r\nOverflow\r\n".split(/[\r\n]+/)

答案 3 :(得分:2)

您的split(/(\r\n)+/)无法正常工作,因为返回的数组中有capture groups are included

  

如果pattern包含组,则相应的匹配也将在数组中返回。

一个简单的解决方案是拆分\r\n并扔掉空箱:

s.split(/\r\n/).reject { |s| s == '' }

答案 4 :(得分:2)

除非您以二进制模式读取Windows文本文件,否则不应在字符串中获取\r\n。在文本模式下阅读它,Ruby将自动为您修复\r