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/)

杀死格式。

4

2 回答 2

2

代替 using splitscan用于第一部分:

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"]
于 2012-11-29T14:13:10.190 回答
0

你必须使用 unicode:

s.split(/\u0020/)

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

于 2012-11-29T14:15:46.440 回答