我想在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 :(得分: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。