2012-11-29 70 views
2

我想在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/) 

杀死的格式。

+0

如果您正在寻找一种基于换行符将字符串拆分为数组的简单方法,请查看Ruby'String.lines'方法:http://www.ruby-doc.org/芯2.1.2/String.html#方法-I线 –

回答

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

你必须使用unicode:

s.split(/\u0020/) 

它不完全是你想要的输出,但它非常接近,然后你可以诉诸使用flat_map。