如何在不使用ruby中的正则表达式的情况下从数组中获取值?

时间:2016-02-16 04:35:12

标签: arrays ruby

从字符串数组中我需要获取以age开头的字符串 - 后跟最多2位数字和可选的“+”符号。

Ex:1岁,22岁,55岁,1岁以上,15岁以上

以下是我的阵列:

arr = ["vintage-colllections","age-5"]
         or
arr = ["vintage-colllections","age-51+"]

我将从阵列中提取年龄“5岁”或“年龄51岁”。

我尝试了以下事项:

arr.find {|e| e.include?"age-"}

适用于其他场景,但在数组的第一个元素上面还包括(vint)年龄 - 在那里失败。

arr.find { |e| /age-\d*\+?/ =~ e} 

工作正常,但我试图避免使用正则表达式。

还有其他更好的方法吗? 欢迎任何建议。

2 个答案:

答案 0 :(得分:5)

使用start_with?

arr.find { |e| e.start_with?("age-") }

答案 1 :(得分:2)

我必须咬紧牙关不要使用正则表达式,但是这里有。我假设问题是我在问题上留下的评论中所描述的。

def find_str(arr)
  arr.map { |str| str_match(str) }.compact
end

def str_match(str)
  return nil unless str[0,4] == "age-"
  last = str[-1] == '+' ? -2 : -1
  Integer(str[4..last]) rescue return nil
  str
end

find_str ["cat", "age-5"]     #=> ["age-5"] 
find_str ["cat", "age-51+"]   #=> ["age-51+"] 
find_str ["cat", "age-5t1+"]  #=> [] 
find_str ["cat", "xage-51+"]  #=> []