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