Rails:如果在数组中,从字符串中删除子字符串

时间:2014-11-28 18:49:23

标签: ruby arrays string

我知道我可以轻松remove a substring from a string

现在我需要从字符串中删除每个子字符串,如果子字符串在数组中。

arr = ["1. foo", "2. bar"]
string = "Only delete the 1. foo and the 2. bar"

# some awesome function
string = string.replace_if_in?(arr, '')
# desired output => "Only delete the and the"

要删除的所有功能都会调整字符串,例如subgsubtr,...仅将一个字作为参数,不是数组。但是我的数组有20多个元素,所以我需要比使用sub 20次更好的方法。

可悲的是,它不仅仅是删除单词,而是将整个子字符串删除为1. foo

我将如何尝试?

3 个答案:

答案 0 :(得分:6)

您可以使用接受正则表达式的gsub,并将其与Regexp.union结合使用:

string.gsub(Regexp.union(arr), '')
# => "Only delete the  and the "

答案 1 :(得分:4)

如下:

 arr = ["1. foo", "2. bar"]
 string = "Only delete the 1. foo and the 2. bar"

 arr.each {|x| string.slice!(x) }
 string # => "Only delete the  and the " 

一个扩展的事情,这也允许您使用regexp\.服务字符裁剪文字(Uri的回答也允许):

 string = "Only delete the 1. foo and the 2. bar and \\...."
 arr = ["1. foo", "2. bar", "\..."]

 arr.each {|x| string.slice!(x) }
 string # => "Only delete the  and the  and ."

答案 2 :(得分:1)

在数组元素

上使用带有#join的#gsub

您可以通过在数组元素上调用#join来使用#gsub,并使用正则表达式替换运算符将它们连接起来。例如:

arr = ["foo", "bar"]
string = "Only delete the foo and the bar"
string.gsub /#{arr.join ?|}/, ''
#=> "Only delete the  and the "

然后,您可以以任何您认为合适的方式处理留下的额外空间。当你想要审查单词时,这是一种更好的方法。例如:

string.gsub /#{arr.join ?|}/, '<bleep>'
#=> "Only delete the <bleep> and the <bleep>"

另一方面,如果你需要关心空格,split / reject / join可能是更好的方法链。总是有不止一种方法可以做某事,你的里程可能会有所不同。