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

を使用する代わりに、最初の部分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"]
于 2012-11-29T14:13:10.190 に答える
0

ユニコードを使用する必要があります:

s.split(/\u0020/)

それはまさにあなたが望む出力ではありませんが、非常に近いので、 flat_map を使用することに頼ることができます。

于 2012-11-29T14:15:46.440 に答える