给定一个字符串数组,
array1 = ["abcdwillbegoneabcccc","cdefwilbegokkkabcdc"]
和另一个由模式组成的字符串数组,例如["abcd","beg[o|p]n","bcc","cdef","h*gxwy"]
任务是删除与任何模式字符串匹配的子字符串。例如,这种情况下的样本输出应该是:
["willbegonea","wilbegokkk"]
因为我们已经删除了与其中一种模式匹配的子字符串(根据出现的位置,匹配前匹配或匹配后匹配)。假设一两个匹配项总是出现在 array1 中每个字符串的开头或结尾处。
有没有用 ruby 优雅地解决上述问题的想法?
最佳答案
构建一个正则表达式如何?
array1 = ["abcdwillbegoneabcccc","cdefwilbegokkkabcdc"]
to_remove = ["abcd","beg[o|p]n","bcc","cdef","h*gxwy"]
reg = Regexp.new(to_remove.map{ |s| "(#{s})" }.join('|'))
#=> /(abcd)|(beg[o|p]n)|(bcc)|(cdef)|(h*gxwy)/
array1.map{ |s| s.gsub(reg, '') }
#=> ["willeacc", "wilbegokkkc"]
注意我的结果和你的不一样
["willbegonea","wilbegokkk"]
但我认为我的是正确的,它从原来的版本中删除了“abcd”、“begon”和“bcc”,这似乎是我们想要的。
关于ruby - 删除 ruby 中的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2206015/