ruby - 删除 ruby​​ 中的子字符串

标签 ruby regex string

给定一个字符串数组,

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/

相关文章:

ruby - 使用 Ruby 的 JS 风格异步/非阻塞回调执行,没有像线程这样的重型机器?

ruby - 在 Ruby 中转到 channel

regex - 如何规范/关联Google表格中的Unicode字符?

regex - 使用grep/sed/awk提取特定字段对应的字符串

C语法。复制字符串

ruby - Heroku 上的 OpenSSL 1.0.1

ruby - 无法将 nil 转换为字符串——已编辑以重述所有失败的尝试

javascript - IE7 正则表达式问题 - 适用于所有浏览器的正则表达式在 ie7 中不起作用

python - 在 Python 中查找多个子字符串之一的最有效方法是什么?

objective-c - 计算 '$' 在字符串中出现的次数( Objective-C )