从字符串中删除Array中的短语

时间:2012-07-20 00:47:04

标签: ruby ruby-on-rails-3

我需要从Ruby中的字符串中删除一些短语。短语在数组中定义。它看起来像这样:

remove = ["Test", "Another One", "Something Else"]

然后我想检查并从给定的字符串中删除它们。

“这是一个测试”=> “这是一个 ” “这是另一个”=> “这是 ” “这是另外两个”=> “这是另外两个”

使用Ruby 1.9.3和Rail 3.2.6。

2 个答案:

答案 0 :(得分:5)

ary = ["Test", "Another One", "Something Else", "(RegExp i\s escaped)"]
string.gsub(Regexp.union(ary), '')

Regexp.union可以用来将一个字符串(或正则表达式)数组编译成一个正则表达式,因此只需要一次搜索&取代

Regexp.union ['string', /regexp?/i] #=> /string|(?i-mx:regexp?)/

答案 1 :(得分:1)

最简单(但不是最有效):

# Non-mutating
cleaned = str
remove.each{ |s| cleaned = cleaned.gsub(s,'') }

# Mutating
remove.each{ |s| str.gsub!(s,'') }

效率更高(但不太清晰):

# Non-mutating
cleaned = str.gsub(Regexp.union(remove), '')

# Mutating
str.gsub!(Regexp.union(remove), '')