2013-07-27 12 views
6

Proszę, pomóż mi z regexp dla następnego zadania: Mam „koszt” kolumny w jakimś stole, ale wartości są różne:Jak usunąć wszystkie znaki z ciągu, z wyjątkiem liczb, "," i "." używając Ruby?

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

muszę usunąć każdy znak z wyjątkiem digits i , i .. Potrzebuję więc wartości, którą zawsze można sparsować jako Float.

+0

Co pan próbował? Najlepiej przeczytać jakąś dokumentację lub google, zanim zadasz pytanie. – stevekohls

+2

Co chcesz interpretować "1,22"? – bsd

+0

Cokolwiek napisałeś jako kod, jest nieprawidłowe. Czy to tablica ciągów? – sawa

Odpowiedz

0

można zastąpić wszystkie spacje, wszystko '$' przez ''

+2

Jak zrobiłbyś to w Ruby? – likeitlikeit

1

Aby wyodrębnić numery:

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

Zakładając przecinki , powinien być traktowany jak kropkami . (jak w '1,22' ->1.22), to powinien konwertować wartości float:

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

Spróbuj tego:

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

To było bardzo pomocne! Czy jest jakiś sposób na zachowanie podziałów linii w kodzie? (Próbuję zrobić program do czyszczenia pliku CSV.) – oliviasteger

+1

@InspectorElement Dodaj '\ r' i' \ n' do listy znaków, a następnie nie zostaną one usunięte. – ProgramFOX

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

inny:

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"] 
Powiązane problemy