我有一个应用程序从Feed
获取具有以下格式的一串内容b="yesterday: 136.00, current: *143.00*, change: *+7.00*, change_2: *5.15%*, high: 143.00, low: 143.00"
不定期地,Feed可能会返回2014/08/15格式的日期,而不是
这样的数字b="yesterday: 2014/12/02, current: *143.00*, change: *+7.00*, change_2: *5.15%*, high: 143.00, low: 143.00"
但是,此日期可能会以任何类别返回,例如“change_2:2013/1/21”甚至是“高:2014/11/23”的随机格式。
Feed也可以返回逗号分隔值而不是小数,但实际上它应该是十进制值,例如。
b="yesterday: 136,00, current: *143.00*, change: *+7.00*, change_2: *5,15%*, high: 143.00, low: 143.00"
Feed还可能会返回以下内容:
b="yesterday: 2014/02/12, current: *143,00*, change: *+7.00*, change_2: *5.15%*, high: 143.00, low: 143.00"
请注意,已返回日期和逗号分隔值,并且流返回此数据的顺序完全是随机的。
如何检查以确保传入的数据的清晰度以确保将vales中的逗号转换为小数点,例如23,12至23.13并且返回的任何日期将替换为值0
此问题是由同事发布的this的变体
当我将日期作为第一个值时,aelor的第一个回答会返回以下内容:
b = ["yesterday: 0", "current: *143.00*", "change: *+7.00*", "change_2: *5.15%*", "high: 143.00", "low: 143.00"]
然后我做了
c = b.split(". ")
d = c.map{ |x| x.scan(/[\d\.-]+/)[0] }.map(&:to_f)
但是d返回
[0.0, 143.0, 7.0, 2.0, 143.0, 143.0]
而不是
[0.0, 143.0, 7.0, 5.15, 143.0, 143.0]
答案 0 :(得分:0)
你可以这样做:
b="yesterday: 2014/02/12, current: *143,00*, change: *+7.00*, change_2: *5.15%*, high: 143.00, low: 143.00"
anydate = b.scan(/\d{4}\/\d{2}\/\d{2}/)
if !anydate.empty?
anydate.each {|s| b = b.gsub(s,'0').gsub(",",".")}
else
b = b.gsub(",",".")
end
检查b
"yesterday: 0. current: *143.00*. change: *+7.00*. change_2: *5.15%*. high: 143.00. low: 143.00"
答案 1 :(得分:0)
如果分隔逗号后面肯定有空格,首先你要删除扮演小数分隔符角色的逗号:
s = "yesterday: 136,00, current: *143.00*, change: *+7.00*, " + \
"change_2: *5,15%*, high: 143.00, low: 143.00"
s.gsub! /,(?=\S)/, '.'
现在让我们摆脱日期:
s.gsub! /(:\D*)(\d{2,4}[\-\/]\d{2,4}[\-\/]\d{2,4})(?=\D)/, $1+'0'
你走了。