2009-10-27 16 views
22

Estoy tratando de dividir una cadena considerable cada cuatro caracteres. Así es como estoy tratando de hacerlo:Ruby regex para una división cada cuatro caracteres que no funciona

big_string.split(/..../) 

Esto está produciendo una matriz nil. Por lo que puedo ver, esto debería estar funcionando. Incluso lo hace cuando lo enchufo en un online ruby regex test.

+0

¿Por qué dividir un número entero utilizando expresiones regulares? ¿Qué tal si dividimos sucesivamente por 10000 y almacenamos los resultados en una matriz? – Kai

Respuesta

78

Try scan lugar:

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

o

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

Si el número de caracteres no es divisible por 4, también puede agarrar los caracteres restantes:

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

(El {1,4} agarrará avariciosamente entre 1 y 4 caracteres)

1

Hmm, no sé lo que Rubular está haciendo allí y por qué - pero

big_string.split(/..../) 

se traduce en

dividir la cadena en cada 4 caracteres de secuencia

que debería dar como resultado correctamente algo así como

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

¿Por qué estás escapando tu primer '.' y el') '? Eso no es válido 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

¿Ups? ++ 1 para compacidad ... –

Cuestiones relacionadas