给出一个字符串:
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。
答案 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
。