2011-05-12 45 views
5

给予相同的字符串:如何将Ruby字符串拆分为“ r n”?

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。

+1

哇,3个重复的答案。 – Zabba 2011-05-12 06:39:25

回答

9

差不多了,试试这个:

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

这给[1,3,2,1]这可能是 “真正” 的答案。但是,否则,s.chomp.scan...会给[1,3,2]

+0

这也分裂在孤独'\ r','\ n','\ n \ n \ r \ n'等等。这并不是什么问题,但可能是一个更好的主意。 – 2016-08-09 09:56:00

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"] 
3

您想在/[\r\n]+/

"G o o d\r\nDay\r\n\r\n\r\nStack\r\n\r\nOverflow\r\n".split(/[\r\n]+/) 
2

分裂你split(/(\r\n)+/)如您所愿,因为capture groups are included返回数组中不起作用:

如果模式包含组,各自的比赛将被退回在数组中也是如此。

一个简单的解决办法是拆就\r\n和扔掉空的物品:

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

你不应该让你的琴弦\r\n,除非你在Windows的文本文件阅读在二进制模式。以文本模式阅读它,Ruby将自动为您修复\r