2008/2/25, Glenn <glenn_ritz / yahoo.com>: > Hello, > > I'm wondering if there is a method for the String class that splits a string on some characters and keeps the split characters in the elements of the resulting array? > > The split method returns an array in this example: > > p "This is a sentence. This is a sentence! This is a sentence?".strip.split(/\.|\?|\!/) > > > ["This is a sentence", " This is a sentence", " This is a sentence"] > > The three sentences in the above string have very different meanings, but loose those meanings without the punctuation, so I'd like to keep the punctuation. I'd like a method that keeps the split characters, and returns this array: > > ["This is a sentence.", " This is a sentence!", " This is a sentence?"] > > Does such an array exist? If not, would it be possible to modify the split method to produce that result? > > I'm running Ruby 1.8.6 on Windows. Hm, you could do it with lookbehind on 1.9. On 1.8 you only have lookforward which gives you this: irb(main):002:0> "a. b.".split /(?=\.\s+)/ => ["a", ". b."] Not quite what you wanted. :-) But here's an alternative approach which works with 1.8: irb(main):005:0> "a. b. c! d? e.".scan /.*?[.!?](?:\s|$)/ => ["a. ", "b. ", "c! ", "d? ", "e."] Kind regards robert -- use.inject do |as, often| as.you_can - without end