2011-01-22 23 views
8

Ho una stringa che sarà sempre almeno un numero, ma può anche contenere lettere prima e/o dopo il numero:stringa di Spalato su un numero, mantenendo il numero

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

Ho bisogno di dividere il stringa come questa:

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

Come posso fare questo con Ruby 1.9.2?

risposta

18

String#splitkeep any groups dall'enunciazione del delimitatore nella matrice di risultati.

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

Nel caso in cui non volevano davvero gli spazi nei separatori, e si voleva avere una maniglia costante sul prima/dopo, utilizzare questo:

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"]] 

Così si potrebbe sempre fare:

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

... invece di testare la durata delle partite o alcuni di questi.

Problemi correlati