我有以下字符串:
24 hours
7 days
45 days
2 seconds
5 years
等。所有这些代表铁路电话,例如24.hours
,7.days
,45.days
,它们始终返回Integer
。
我可以使用eval
轻松解析这些字符串(先用点替换空格)。
我还可以编写一些复杂的解析器,它将查找years
或year
并将其替换为秒数。
但有没有更温和的方法来解析这些字符串?
答案 0 :(得分:1)
我不知道这是否是 gentler ,但这是一种方法(现在几乎没有错误检查):
def parse_time_span(value)
acceptable_time_units = ["minute", "second", "week", "day", "hour", "month", "year"]
value.match /([0-9]+) (.*)/
return nil unless $1 && $2
return nil unless acceptable_time_units.include?($2) || acceptable_time_units.collect{|x| x.pluralize}.include?($2)
$1.to_i.send $2.to_sym
end
答案 1 :(得分:0)