正则表达式匹配多个字符串 - Ruby

时间:2015-04-14 08:53:00

标签: ruby arrays regex

说我有以下地址数组

array = ["1 New Street, Filton Grove, Bristol BD7 0AA", "2 New Street, Filton Grove, Bristol BD7 0AA", "3 New Street, Filton Grove, Bristol BD7 0AA"]

我想检查一下数组中的每个项目是否包含单词Filton Grove Bristol,但由于地址中有逗号,所以会轻微地抛弃我。

如何忽略逗号并检查每个单词迭代中是否存在每个单词

到目前为止,我有这个

regexp = /^Filton Grove Bristol/i
array.all? { |a| regex =~ a }

但这失败了。

5 个答案:

答案 0 :(得分:2)

您可以单独检查单词。

regexp_checks = [/Filton/i, /Grove/i, /Bristol/i]
array.all? { |a| regexp_checks.all?{|rgx| a =~ rgx} }

答案 1 :(得分:2)

你也可以这样检查..

regexp_checks = [/Filton.*?Grove.*?Bristol/i]
array.all? { |a| regexp_checks.all?{|rgx| a =~ rgx} }

注意:仅当您要维护出现的单词顺序时才使用此选项。 如果订单很重要而且之间不允许其他任何词语,你可以使用
    regexp_checks = [/Filton\W+Grove\W+Bristol/i]

答案 2 :(得分:2)

尝试以下正则表达式

regexp = /Filton Grove,?\s*Bristol/i

您的正则表达式中不需要^

答案 3 :(得分:2)

如果三个单词必须符合特定顺序,请尝试以下操作:

regexp = /Filton[,\s]+Grove[,\s]+Bristol/i

答案 4 :(得分:1)

对于所有可能的用例

regexp = /Filton[\s,\s]*Grove[\s,\s]*Bristol/i