检查ruby中字符串中是否存在两个列表中的一个值

时间:2017-03-31 18:29:49

标签: ruby

我有两个包含登录名和文件扩展名的数组: 登录= [' bob',' mark',' joe'] extensions = [' .doc',' .xls']

我需要检查两个列表中的一个值是否存在于字符串中(字符串类似于str =&#34; aaa bob test.txt test text&#34;),如果是,则执行某些操作。< / p>

如何在Ruby中正确执行此检查。

现在我用几个循环和if语句执行此操作。

3 个答案:

答案 0 :(得分:2)

[logins, extensions].all? do |list|
  list.any? { |match| str.include? match }
end

您有两个列表,登录名和扩展名。你想确保all?他们做某事并且做了什么&#39;是字符串包含其元素的any?

使用正则表达式的答案虽然表现得更好,但即使写一点也不那么简单。

答案 1 :(得分:2)

您也可以使用Regexp.union

str = 'aaa bob test.xls test text'
logins     = Regexp.union(['bob', 'mark', 'joe'])
extensions = Regexp.union(['.doc', '.xls'])
str =~ logins && str =~ extensions
# => 12

如果其中一个匹配,则返回nil,如果两个匹配,则返回整数。

作为替代方案,使用Ruby 2.4:

str.match?(logins) && str.match?(extensions)

会返回一个布尔值。

答案 2 :(得分:0)

您可以简单地添加数组以获取具有唯一值的联合,然后迭代以检查字符串是否具有匹配值。

   str = 'aaa bob test.txt test text'
  (logins + extensions).any? { |word| str.include?(word) }

这会返回'true'或'false'