gpt4 book ai didi

ruby - 检查数组元素是否出现在行中

转载 作者:数据小太阳 更新时间:2023-10-29 08:39:43 27 4
gpt4 key购买 nike

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

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

当前行说:

I love my pet dog

输出会说

Found a line containing array string

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

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 可以防止在正则表达式中有意义的字符产生意想不到的效果。

关于ruby - 检查数组元素是否出现在行中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12344737/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com