我知道我可以轻松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"
要删除的所有功能都会调整字符串,例如sub
,gsub
,tr
,...仅将一个字作为参数,不是数组。但是我的数组有20多个元素,所以我需要比使用sub
20次更好的方法。
可悲的是,它不仅仅是删除单词,而是将整个子字符串删除为1. foo
我将如何尝试?
答案 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,并使用正则表达式替换运算符将它们连接起来。例如:
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可能是更好的方法链。总是有不止一种方法可以做某事,你的里程可能会有所不同。