我可以通过执行以下操作来交叉两个数组:
keyphrase_matches = words & city.keywords
如何使用正则表达式实现相同的功能?我想针对正则表达式测试一个数组,并获得一个包含匹配项的新数组。
答案 0 :(得分:2)
您可以使用Enumerable#grep
方法:
%w{a b c 1 2 3}.grep /\d/ # => ["1", "2", "3"]
答案 1 :(得分:1)
使用array.grep(regex)
返回与给定正则表达式匹配的所有元素。
请参阅Enumerable#grep
。
答案 2 :(得分:0)
据我了解,如果arr1
和arr2
是两个字符串数组(虽然您没有说它们包含字符串),您想知道是否可以使用正则表达式生成{{ 1}}。
首先是一些测试数据:
arr1 & arr2
我们想要的结果:
arr1 = "Now is the time for all good Rubyists".split
#=> ["Now", "is", "the", "time", "for", "all", "good", "Rubyists"]
arr2 = "to find time to have the good life".split
#=> ["to", "find", "time", "to", "have", "the", "good", "life"]
根据@meagar和@August的建议,我可以想到两种使用arr1 & arr2
#=> ["the", "time", "good"]
的方法:
<强>#1 强>
Enumerable#grep
<强>#2 强>
arr1.select { |e| arr2.grep(/#{e}/).any? }
#=> ["the", "time", "good"]
当然,regex = Regexp.new("#{arr2.join('|')}")
#=> /to|find|time|to|have|the|good|life/
arr1.grep(regex)
#=> ["the", "time", "good"]
通常是首选,尤其是Code Golf。