2009-10-27 17 views
22

Ich versuche, eine beträchtliche Zeichenfolge alle vier Zeichen zu teilen. Dies ist, wie ich es versuche:Ruby Regex für einen Split alle vier Zeichen funktioniert nicht

big_string.split(/..../) 

Dies ergibt eine Null-Array. Soweit ich sehen kann, sollte dies funktionieren. Es funktioniert sogar, wenn ich es in eine online ruby regex test stecke.

+0

Warum würden Sie Split eine ganze Zahl mit Regex? Wie wäre es, wenn man einfach nur 10000 teilt und die Ergebnisse in einem Array speichert. – Kai

Antwort

78

Try scan statt:

$ irb 
>> "abcd1234beefcake".scan(/..../) 
=> ["abcd", "1234", "beef", "cake"] 

oder

>> "abcd1234beefcake".scan(/.{4}/) 
=> ["abcd", "1234", "beef", "cake"] 

Wenn die Anzahl der Zeichen, die durch 4 teilbar ist, können Sie auch die restlichen Zeichen greifen:

>> "abcd1234beefcakexyz".scan(/.{1,4}/) 
=> ["abcd", "1234", "beef", "cake", "xyz"] 

(Die {1,4} wird gierig zwischen 1 und 4 Zeichen greifen)

1

Hmm, ich weiß nicht, was Rubular es tut und warum - aber

big_string.split(/..../) 

nicht übersetzen in

die Zeichenfolge aufgeteilt bei jedes 4-Zeichen-Sequenz

was sollte in etwa wie

ergeben
["", "", "", "abc"] 
+0

Warum entkommst du deinem ersten '.' und dem') '? Das ist kein gültiger Ruby. – Volte

0

Whoops.

str = 'asdfasdfasdf' 
c = 0 
out = [] 
inum = 4 
(str.length/inum).round.times do |s| 
    out.push(str[c, round(s * inum)]) 
    c += inum 
end 
+0

Whoops? ++ 1 für Kompaktheit ... –