【发布时间】:2015-09-12 04:01:03
【问题描述】:
想法。给定字符串,返回所有匹配项(有重叠)和这些匹配项之前的文本。
示例。对于文本atatgcgcatatat 和查询atat,有三个匹配项,所需的输出是atat、atatgcgcatat 和atatgcgcatatat。
问题。我使用 Ruby 2.2 和 String#scan 方法来获得多个匹配项。我尝试使用前瞻,但正则表达式/(?=(.*?atat))/ 返回以atat 结尾的每个子字符串。必须有一些正则表达式的魔法来解决这个问题,但我想不出正确的咒语。
【问题讨论】:
-
我猜是不可能一口气完成的。匹配不只是重叠,它们从相同的索引开始。您需要在成功后将索引移动到每个匹配开始,以查看是否有其他匹配不等于前一个。
-
非常感谢您的 cmets!
-
反转字符串,并使用相同的模式。
-
@CasimiretHippolyte 我已经尝试过反转字符串的想法,但对我来说似乎相当难看:
"atatgcatatat".reverse.scan(/(?=(tata.*))/).flatten.map(&:reverse).reverse。 -
我对最佳答案的投票投给了sawa。 @Nakilon 获得协助(无论是否需要)。