【问题标题】:Regexp to match multiple Strings - Ruby正则表达式匹配多个字符串 - Ruby
【发布时间】:2015-04-14 08:52:59
【问题描述】:

假设我有以下地址数组

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 }

但这失败了。

【问题讨论】:

  • 它们都包含逗号吗?

标签: ruby arrays regex


【解决方案1】:

您可以单独检查单词。

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

【讨论】:

  • 如果你不想要单词的顺序,这是最好的:)
【解决方案2】:

如果这三个词必须按特定的顺序,试试这个:

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

【讨论】:

    【解决方案3】:

    你也可以这样检查..

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

    注意:仅当您想保持单词出现的顺序时才使用此选项。 如果顺序很重要,并且在两者之间不允许有其他的话..您可以使用
    regexp_checks = [/Filton\W+Grove\W+Bristol/i]

    【讨论】:

    • 谢谢,在我的情况下,单词的顺序会很有用
    【解决方案4】:

    试试下面的正则表达式

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

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

    【讨论】:

      【解决方案5】:

      适用于所有可能的用例

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-10-11
        • 1970-01-01
        • 2021-12-27
        • 1970-01-01
        • 1970-01-01
        • 2014-10-08
        • 2015-09-02
        相关资源
        最近更新 更多