@pwned がリンクした質問の複製ではないとおっしゃいましたが、そのようなものです。Ruby を少しいじる必要があるだけです。
s = "hello world, I am the universe, I am the world" # original string
a = s.split(/(I am)/)
#=> ["hello world, ", "I am", " the universe, ", "I am, " the world"]
ここで、上記のリンクされた SO の質問で提案されているソリューションを使用します。ただし、配列の最初の要素はスキップします。
sliced = a[1..-1].each_slice(2).map(&:join)
#=> ["I am the universe, ", "I am the world"]
これを、除外した配列要素と結合します。
final = [a[0]] + sliced
#=> ["hello world, ", "I am the universe, ", "I am the world"]
これを次のようなメソッドにスローします。
class String
def split_and_include(words)
s = self.split(/(#{words})/)
[s[0]] + s[1..-1].each_slice(2).map(&:join)
end
end
"You all everybody. You all everybody.".split_and_include("all")
#=> ["You ", "all everybody. You ", "all everybody."]
これを行うためのよりクリーンな方法があると確信しており、より簡単な方法を発見したら回答を更新します。