如何使用Ruby从字符串中删除除数字,","和"."之外的所有字符?

8

请帮我写一个正则表达式来处理下面的任务:我有一个表格中的“cost”列,但其中的值是不同的:

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

我需要除了数字,.之外的所有字符都被删除。因此,我需要得到一个始终可以解析为浮点数的值。


你尝试过什么?在提问之前最好阅读一些文档或使用谷歌搜索。 - stevekohls
2
你想让 '1,22' 被解释成什么? - bsd
你所编写的代码无效。它是一个字符串数组吗? - sawa
6个回答

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

12

试一下这个:

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

这真的很有帮助!有没有办法在代码中保留换行符?(我正在尝试编写一个清理CSV文件的程序。) - Olivia Steger
1
@InspectorElement 将\r\n添加到字符列表中,它们就不会被移除了。 - ProgramFOX
1
谢谢,这对我有用。只有一件事,如果你想排除逗号,那么只需使用 gsub(/[^0-9.]/, "")。 - Touseef Murtaza

2
提取数字的方法如下:
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"]

假设逗号 , 应该被视为小数点 .(例如 '1,22' -> 1.22),这将把您的值转换为浮点数:
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]

0

再来一个:

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

0

你可以将所有的空格,所有的'$'替换为''


2
你会用 Ruby 怎么做呢? - likeitlikeit

-1
str = "a1234c324ee4r"    
str.delete("^0-9")

它从字符串中删除所有字符并返回所有整数


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接