2011-01-22 22 views
8

tengo una cadena que siempre será, al menos, un número, pero también puede contener letras antes y/o después del número:Separar una cadena en un número, conservando el número

"4" 
"Section 2" 
"4 Section" 
"Section 5 Aisle" 

tengo que dividir el cadena como esta:

"4" becomes "4" 
"Section 2" becomes "Section ","2" 
"4 Aisle" becomes "4"," Aisle" 
"Section 5 Aisle" becomes "Section ","5"," Aisle" 

¿Cómo puedo hacer esto con Ruby 1.9.2?

Respuesta

18

String#splitkeep any groups de la expresión regular del delimitador en la matriz de resultados.

parts = whole.split(/(\d+)/) 
2

En caso de que en realidad no quieren que el espacio en blanco en los separadores, y queríamos tener un mango consistente en el antes/después, utilice esto:

test = [ 
    "4", 
    "Section 2", 
    "4 Section", 
    "Section 5 Aisle", 
] 

require 'pp' 
pp test.map{ |str| str.split(/\s*(\d+)\s*/,-1) } 
#=> [["", "4", ""], 
#=> ["Section", "2", ""], 
#=> ["", "4", "Section"], 
#=> ["Section", "5", "Aisle"]] 

Por lo tanto siempre se puede do:

prefix, digits, suffix = str.split(/\s*(\d+)\s*/,-1) 
if prefix.empty? 
    ... 
end 

... en lugar de probar la duración de sus partidos o algo así.

Cuestiones relacionadas