如何将字符串拆分为数组,保持换行符?

时间:2012-11-29 14:04:10

标签: ruby string split

我想在Ruby中切片一个Unicode字符串。 切片应该保持不可见的字符完整。

以下是输入的示例:

Foo\r\n
\r\n
\r\n
Bär 1.234 Foo test\r\n
blub

应该成为:

Array=["Foo\r\n\r\n\r\n","Bär","1.234,"Foo","test\r\n","blub"]

基本上我想标记字符串并保持格式不变。

当我做类似的事情时:

String.split(/ /)

我最终得到的结果是:

Array=["Foo\r\n\r\n\r\nBär","1.234","Foo"]

等等:

String.split(/\W/)

杀死格式。

2 个答案:

答案 0 :(得分:2)

不使用split,而是使用scan作为第一部分:

text = "Foo\r\n\r\n\r\nBär 1.234 Foo test\r\nblub"
text.scan(/^.+[\r\n]*/)
=> ["Foo\r\n\r\n\r\n", "Bär 1.234 Foo test\r\n", "blub"]

然后有条件地应用您的分割:

text.scan(/^.+[\r\n]*/).map{ |s| s[' '] ? s.split(/ /) : s }.flatten
=> ["Foo\r\n\r\n\r\n", "Bär", "1.234", "Foo", "test\r\n", "blub"]

或:

text.scan(/^.+[\r\n]*/).flat_map{ |s| s[' '] ? s.split(/ /) : s }
=> ["Foo\r\n\r\n\r\n", "Bär", "1.234", "Foo", "test\r\n", "blub"]

答案 1 :(得分:0)

你必须使用unicode:

s.split(/\u0020/)

它不是您想要的输出,但它非常接近,然后您可以使用flat_map。