我想删除字符串中某些字符集中的单词。一种方法是迭代此集合并使用str.gsub("subString", "")
删除特定单词。这种功能是否已退出?
示例字符串:
"Hotel Silver Stone Resorts"
集合中的字符串:
["Hotel" , "Resorts"]
输出应为:
" Silver Stone "
答案 0 :(得分:5)
您可以使用Regexp::union
:
words = ["Hotel" , "Resorts"]
re = Regexp.union(words)
#=> /Hotel|Resorts/
"Hotel Silver Stone Resorts".gsub(re, "")
#=> " Silver Stone "
请注意,您可能需要escape。
答案 1 :(得分:1)
你可以在ruby中从另一个数组中减去一个数组。结果是第一个数组中的所有元素都从第二个数组中删除。
在空格上拆分字符串,在一次快速移动中删除所有额外的单词,重新加入句子。
s = "Hotel Silver Stone Resorts"
junk_words = ['Hotel', 'Resorts']
def strip_junk(original, junk)
(original.split - junk).join(' ')
end
strip_junk(s, junk_words) # => "Silver Stone"
肯定看起来更好(我的眼睛)。不确定性能特征(懒得比较它)
答案 2 :(得分:0)
我不确定你想要什么,但据我所知
sentence = 'Hotel Silver Stone Resorts'
remove_words = ["Hotel" , "Resorts"] # you can add words to this array which you wanted to remove
sentence.split.delete_if{|x| remove_words.include?(x)}.join(' ')
=> "Silver Stone"
或强>
如果你有一个字符串数组,那就容易了:
sentence = 'Hotel Silver Stone Resorts'
remove_words = ["Hotel" , "Resorts"]
(sentence.split - remove_words).join(' ')
=> "Silver Stone"
答案 3 :(得分:0)
你可以尝试不同的东西,但我不知道它是否会更快(取决于字符串的长度和设置)
require 'set'
str = "Hotel Silver Stone Resorts"
setStr = Set.new(str.split)
setToRemove = Set.new( ["Hotel", "Resorts"])
modifiedStr = (setStr.subtract setToRemove).to_a.join " "
输出
"Silver Stone"
它使用Set类,它更快地检索单个元素(基于Hash构建)。 但是,如果你的字符串/集非常大,那么使用to_a的底层转换可能无法提高速度。
它还会隐式删除字符串和集合中的重复项(当您创建集合时)