2011-05-12 16 views
5

Dada una cadena como:Cómo dividir la cadena de Ruby por " r n"?

s = "G o o d\r\nDay\r\n\r\n\r\nStack\r\n\r\nOverflow\r\n" 

me gustaría:

  • dividirlo por (\r\n)+, es decir, me gustaría llegar: ["G o o d", "Day", "Stack", "Overflow"]

    me trataron s.split(/(\r\n)+/) pero doesn' darme el resultado esperado.

    ¿Por qué? ¿Cómo podría obtener el resultado esperado?

  • obtener el número de \r\n en serie, es decir, el resultado esperado es: [1, 3, 2]

    ¿Cómo se hace esto?

Uso Ruby 1.9.2.

+1

Wow, 3 respuestas duplicadas. – Zabba

Respuesta

9

Casi, intente esto:

s.split /[\r\n]+/ 
s.scan(/[\r\n]+/).map { |e| e.size/2 } 

Esto da [1,3,2,1] que es posiblemente la respuesta "real". De lo contrario, s.chomp.scan... daría [1,3,2].

+0

Esto también se divide en '\ r', '\ n',' \ n \ n \ r \ n' solitarios. Eso no es exactamente lo que se pidió, pero probablemente una idea mejor. –

8

Así es como me gustaría ir al respecto:

s = "G o o d\r\nDay\r\n\r\n\r\nStack\r\n\r\nOverflow\r\n" 

s.split(/[\r\n]+/) # => ["G o o d", "Day", "Stack", "Overflow"] 
3

desea dividir por /[\r\n]+/

"G o o d\r\nDay\r\n\r\n\r\nStack\r\n\r\nOverflow\r\n".split(/[\r\n]+/) 
2

Su split(/(\r\n)+/) no funciona como se espera debido capture groups are included en la matriz devuelta:

Si el patrón contiene grupos, serán devueltos a los respectivos partidos en la matriz también.

Una solución fácil sería dividir en \r\n y el tiro de los envases vacíos:

s.split(/\r\n/).reject { |s| s == '' } 
2

No debería estar recibiendo \r\n en sus cadenas, a menos que usted está leyendo en un archivo de texto de Windows en modo binario Léelo en modo texto, y Ruby reparará automáticamente el \r s.

Cuestiones relacionadas