def mpartition(s, *substrings): idx = 0 splits = [0, None] for substring in substrings: idx = s.find(substring, idx) if idx == -1: raise ValueError, "Substring %r not found" % substring splits[-1:-1] = [idx, idx+len(substring)] return [s[splits[i]:splits[i+1]] for i in range(len(splits)-1)]