2013-07-27 18 views
6

Per favore, aiutatemi con un'espressione regolare per il prossimo compito: ho una colonna 'costo' in qualche tavolo, ma i valori ci sono diverse:Come rimuovere tutti i caratteri dalla stringa tranne i numeri "," e "." usando Ruby?

['1.22','1,22','$1.22','1,22$','$ 1.22'] 

Ho bisogno di rimuovere tutti i caratteri tranne digits e , e .. Quindi ho bisogno di ottenere un valore che può sempre essere analizzato come Float.

+0

Che cosa hai provato? Meglio leggere qualche documentazione o google prima di fare la tua domanda. – stevekohls

+2

Cosa si intende per '1,22' da interpretare? – bsd

+0

Qualunque cosa tu abbia scritto come codice non è valido. È una serie di archi? – sawa

risposta

0

è possibile sostituire tutti gli spazi bianchi, tutti '$' da ''

+2

Come lo faresti in ruby? – likeitlikeit

1

per estrarre i numeri:

a = ["1.22", "1,22", "$1.22", "1,22$", "$ 1.22"] 
a.map {|s| s[/[\d.,]+/] } 
#=> ["1.22", "1,22", "1.22", "1,22", "1.22"] 

virgole Assumendo , dovrebbero essere trattati come punti decimali . (come nel '1,22' ->1.22), questo dovrebbe convertire i valori a stare a galla:

a = ["1.22", "1,22", "$1.22", "1,22$", "$ 1.22"] 
a.map {|s| s[/[\d.,]+/].gsub(',','.').to_f } 
#=> [1.22, 1.22, 1.22, 1.22, 1.22] 
8

Prova questo:

yourStr.gsub(/[^0-9,.]/, "") 
+0

Questo è stato molto utile! C'è un modo per mantenere le interruzioni di riga nel codice? (Sto cercando di creare un programma per ripulire un file CSV.) – oliviasteger

+1

@InspectorElement Aggiungi '\ r' e' \ n' alla lista di caratteri, quindi non saranno rimossi. – ProgramFOX

10
a.map {|i| i.gsub(/[^\d,\.]/, '')} 
# => ["1.22", "1,22", "1.22", "1,22", "1.22"] 
0

Un altro:

a= ['1.22','1,22','$1.22','1,22$','$ 1.22'] 
a.map{|i| i[/\d+.\d+/]} 
# => ["1.22", "1,22", "1.22", "1,22", "1.22"] 
Problemi correlati