Ruby: Split string at character, counting from the right side Ruby: Split string at character, counting from the right side ruby ruby

Ruby: Split string at character, counting from the right side


String#rpartition does just that:

name, match, suffix = name.rpartition('.')

It was introduced in Ruby 1.8.7, so if running an earlier version you can use require 'backports/1.8.7/string/rpartition' for that to work.


Put on the thinking cap for a while and came up with this regexp:

"what.to.do.now".split(/\.([^.]*)$/)=> ["what.to.do", "now"]

Or in human terms "split at dot, not followed by another dot, at end of string". Works nicely also with dotless strings and sequences of dots:

"whattodonow".split(/\.([^.]*)$/)=> ["whattodonow"]"what.to.do...now".split(/\.([^.]*)$/)=> ["what.to.do..", "now"]


Here's what I'd actually do:

/(.*)\.(.*)/.match("what.to.do")[1..2]=> ["what.to", "do"]

or perhaps more conventionally,

s = "what.to.do"s.match(/(.*)\.(.*)/)[1..2]=> ["what.to", "do"]