Ruby:如何使用正则表达式返回所有匹配项?

时间:2014-10-02 01:50:03

标签: ruby

我可以通过执行以下操作来交叉两个数组:

keyphrase_matches = words & city.keywords

如何使用正则表达式实现相同的功能?我想针对正则表达式测试一个数组,并获得一个包含匹配项的新数组。

3 个答案:

答案 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)

据我了解,如果arr1arr2是两个字符串数组(虽然您没有说它们包含字符串),您想知道是否可以使用正则表达式生成{{ 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