在Ruby中将字符串的部分匹配到数组的元素

时间:2013-12-19 20:28:54

标签: ruby regex arrays match

我有一个字符串&一个数组,我试图遍历数组,看看它的任何元素是否匹配字符串的一部分。

string = "HOPJYJKCONNECTICUTQZIDAHOKR"

states_array = ["TEXAS", "ALASKA", "IDAHO", "FLORIDA", "MONTANA", "OHIO", "NEWMEXICO", "CONNECTICUT", "COLORADO"]

如何迭代states_array以便我可以找到字符串中的所有匹配项?我想将所有匹配的状态输出为数组&所以最终结果可能如下:

#=> ["CONNECTICUT", "IDAHO"]

4 个答案:

答案 0 :(得分:5)

string = "HOPJYJKCONNECTICUTQZIDAHOKR"
states = ["TEXAS", "ALASKA", "IDAHO", "FLORIDA", "MONTANA", "OHIO", "NEWMEXICO", "CONNECTICUT", "COLORADO"]

states.select { |s| string[s] }
# => ["IDAHO", "CONNECTICUT"]

答案 1 :(得分:2)

Matt的好解决方案,但也可以完成

states.select { |s| string.match(s)}

答案 2 :(得分:1)

由于您在此问题上指定了正则表达式标记,因此可以使用正则表达式进行如下操作:

string.scan(Regexp.new(states.join('|')))
# => ["CONNECTICUT", "IDAHO"] 

使用Matt答案中的变量。但是,不建议这样做。 : - )

答案 3 :(得分:0)

这就像@ Peter_Alvin的回答一样,使用内置方法union

states_array = ["TEXAS", "ALASKA", "IDAHO", "FLORIDA", "MONTANA", "OHIO", "NEWMEXICO", "CONNECTICUT", "COLORADO"]
str = "HOPJYJKCONNECTICUTQZIDAHOKR"
p str.scan(Regexp.union(states_array)) # ["CONNECTICUT", "IDAHO"]