检查数组元素是否显示在线上

我正逐行阅读文件,我想检查该行是否包含数组中的任何元素。 例如,如果我有:

myArray = ["cat", "dog", "fish"]

而现行的说法是:

我爱我的宠物狗

输出会说

找到一个包含数组字符串的行

这是我的,但它不起作用。

myArray = ["cat", "dog", "fish"]
File.open('file.txt').each_line { |line|
  puts "Found a line containing array string" if line =~ myArray  #need to fix this logic
}

我试过include?any? 但不知道我是否正确使用它们。

更新::我忽略了一个重要部分。 我需要完全匹配! 所以我不希望这个声明如果不是确切的,就返回true。 例如,如果我的线条上写着“我爱我的宠物狗”,则该语句应该返回false,因为“dog”在数组中。 不是“小狗”

我对错误澄清的错误


您必须单独检查数组中的每个字符串,并使用b来匹配单词边界以确保您只能得到整个单词:

strings = ["cat", "dog", "fish"].map { |s| Regexp.quote(s) }

File.open('file.txt').each_line do |line|
  strings.each do |string|
    puts "Found a line containing array string" if line =~ /b#{string}b/
  end
end

另外建立一个正则表达式:

strings = ["cat", "dog", "fish"].map { |s| Regexp.quote(s) }
pattern = /b(#{strings.join('|')})b/

File.open('file.txt').each_line do |line|
  puts "Found a line containing array string" if line =~ pattern
end

调用Regexp.quote可防止在正则表达式中具有意义的字符产生意想不到的效果。


你可以使用你的数组创建一个正则表达式

myArray = ["cat", "dog", "fish"]
File.open('file.txt').each_line { |line|
  puts "Found a line containing array string" if %r(#{myArray.join('|')}) === line
}

myArray = ["cat", "dog", "fish"]
File.open('file.txt').each_line { |line|
  puts "Found a line containing array string" if myArray.any? { |word| /.*#{word}.*/.match? line}
}

代码未经测试

链接地址: http://www.djcxy.com/p/25687.html

上一篇: Check if array element appears on line

下一篇: evaluate if array has any items in ruby