如何grep数组中与另一个数组中的模式匹配的元素?

时间:2013-07-11 13:37:36

标签: ruby regex arrays

我有两个数组:

a = ["X2", "X3/X4", "X5/X6/X7", "X8/X9/X10/X11"]
b = ["X9/X10", "X3/X4"]

现在我需要从'a'数组中选择条目,该数组使用数组'b'中的任何条目进行正则表达式。

预期结果是:

["X3/X4", "X8/X9/X10/X11"]

我如何在Ruby中执行此操作?

4 个答案:

答案 0 :(得分:4)

我会这样做:

a.grep(Regexp.union(b))
# => ["X3/X4", "X8/X9/X10/X11"] 

答案 1 :(得分:2)

这应该有效:

a.grep(/#{b.join('|')}/)
# => ["X3/X4", "X8/X9/X10/X11"]

答案 2 :(得分:2)

尝试以下方法:

 a = ["X2", "X3/X4", "X5/X6/X7", "X8/X9/X10/X11"] 
 b = ["X9/X10", "X3/X4"]
 p a.select{|i| b.any?{|j| i.include? j }}
 #>> ["X3/X4", "X8/X9/X10/X11"]

答案 3 :(得分:0)

最安全的方法是构建一个正则表达式,然后选择与此表达式匹配的数组元素:

Regexp.union("a", "b", "c")
# => /a|b|c/

Regexp.union(["a", "b", "c"])
# => /a|b|c/

("b".."e").to_a.grep(Regexp.union("a", "b", "c"))
# => ["b", "c"]