2013-07-27 42 views
6

Xin vui lòng, giúp tôi với một regexp cho nhiệm vụ tiếp theo: Tôi có một cột 'chi phí' trong một số bảng, nhưng các giá trị có khác nhau:Cách xóa tất cả các ký tự khỏi chuỗi ngoại trừ số, "," và "." sử dụng Ruby?

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

tôi cần phải loại bỏ tất cả các nhân vật ngoại trừ digits,.. Vì vậy, tôi cần có một giá trị luôn có thể được phân tích cú pháp là Float.

+0

bạn đã làm gì cố gắng? Tốt nhất để đọc một số tài liệu hoặc google trước khi đặt câu hỏi của bạn. – stevekohls

+2

Bạn muốn '1,22' được hiểu là gì? – bsd

+0

Bất cứ điều gì bạn viết dưới dạng mã không hợp lệ. Nó là một chuỗi các chuỗi? – sawa

Trả lời

0

bạn có thể thay thế tất cả không gian màu trắng, tất cả '$' bởi ''

+2

Làm thế nào bạn sẽ làm điều đó trong ruby? – likeitlikeit

1

Để trích xuất các con số:

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

Giả dấu phẩy , nên bị đối xử như điểm thập phân . (như trong '1,22' ->1.22), điều này sẽ chuyển đổi các giá trị của bạn để 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

Hãy thử cách này:

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

Điều này rất hữu ích! Có cách nào để giữ ngắt dòng trong mã không? (Tôi đang cố gắng tạo một chương trình để dọn sạch tệp CSV.) – oliviasteger

+1

@InspectorElement Thêm '\ r' và' \ n' vào danh sách các ký tự, sau đó chúng sẽ không bị xóa. – ProgramFOX

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

Một số khác:

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"] 
Các vấn đề liên quan