On Thu, May 28, 2009 at 8:04 AM, Max Williams <toastkid.williams / gmail.com> wrote: >>> s = "My Lesson" > => "My Lesson" >>> copied_name(_) > => "Copy of My Lesson" >>> copied_name(_) > => "Copy 1 of My Lesson" >>> copied_name(_) > => "Copy 2 of My Lesson" > Well, taking that approach how about: def copied_name(source_name) case source_name when /^Copy of (.*)$/i "Copy 1 of #{$1}" when /^Copy (\d+) of (.*)$/i num = $1.to_i "Copy #{num+1} of #{$2}" else "Copy of #{source_name}" end end s = "My Lesson" # => "My Lesson" s = copied_name(s) # => "Copy of My Lesson" s = copied_name(s) # => "Copy 1 of My Lesson" s = copied_name(s) # => "Copy 2 of My Lesson" However, since you used the i option on your regex maybe you wanted to preserve the case of the "Copy of part" which this doesn't s = "copy of My Lesson" # => "copy of My Lesson" s = copied_name(s) # => "Copy 1 of My Lesson" s = copied_name(s) # => "Copy 2 of My Lesson" s = copied_name(s) # => "Copy 3 of My Lesson" If so then this does: def copied_name(source_name) # !> method redefined; discarding old copied_name case source_name when /^(Copy )(of .*)$/i "#{$1}1 #{$2}" when /^(Copy )(\d+)( of .*)$/i num = $2.to_i "#{$1}#{num+1}#{$3}" else "Copy of #{source_name}" end end s = "My Lesson" # => "My Lesson" s = copied_name(s) # => "Copy of My Lesson" s = copied_name(s) # => "Copy 1 of My Lesson" s = copied_name(s) # => "Copy 2 of My Lesson" s = "copy of My Lesson" # => "copy of My Lesson" s = copied_name(s) # => "copy 1 of My Lesson" s = copied_name(s) # => "copy 2 of My Lesson" s = copied_name(s) # => "copy 3 of My Lesson" -- Rick DeNatale Blog: http://talklikeaduck.denhaven2.com/ Twitter: http://twitter.com/RickDeNatale WWR: http://www.workingwithrails.com/person/9021-rick-denatale LinkedIn: http://www.linkedin.com/in/rickdenatale