从文字中,我如何排除数组中列出的某些关键字?
这是我的循环:
@entries.each do |entry|
entry.title.include? ("bad_word")
(do nothing)
else
puts entry.title
我也尝试过:
if ["bad_word"].include? entry.title
只要我只指定一个单词,第一位代码就可以工作。 "bad_word" || "naughty_word"
只接受第一个。第二位代码似乎没有过滤任何内容。
答案 0 :(得分:1)
您可以使用正则表达式:
/bad_word|naughty_word|another_bad_word/i
举个例子:
"Here's a bad_word" =~ /bad_word|naughty_word/i
# 9
"Here's a naughty_word" =~ /bad_word|naughty_word/i
# 9
"Here's a perfectly fine title" =~ /bad_word|naughty_word/i
# nil
一个潜在的问题是你会得到误报:
"He has skills" =~ /bad_word|naughty_word|kill/i
# 8
您可以尝试使用字边界来解决它:
"He has skills" =~ /\b(bad_word|naughty_word|kill)\b/i
# nil
但是你会得到假阴性:
"A kills B" =~ /\b(bad_word|naughty_word|kill)\b/i
# nil
您可以尝试使用以下方法解决问题:
"A kills B" =~ /\b(bad_word|naughty_word|kill[a-z]{,2})\b/i
# 2
"He has skills" =~ /\b(bad_word|naughty_word|kill[a-z]{,2})\b/i
# nil
然而,逻辑是如此模糊,文字检测,你无法找到解决问题的完美方案。
答案 1 :(得分:0)
或者您只需打印标题,除非这是一个坏词,就像在这个片段中一样:
<% unless ["bad_word1", "bad_word2"].include? entry.title %>
# print the title
<% else %>
# do sth else
<% end %>
也许更直接(unless
- else
逻辑可能会令人困惑):
<% if ["bad_word1", "bad_word2"].exclude? entry.title %>
# print the title
<% else %>
# do sth else
<% end %>