2

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

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

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

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

使用 Ruby 1.9.3 和 Rail 3.2.6。

4

2 回答 2

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?)/
于 2012-07-20T00:52:28.907 回答
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), '')
于 2012-07-20T04:19:41.197 回答