p = re.compile('[^{0}]+|[{0}]+'.format(re.escape(string.punctuation +
    string.whitespace)))
print(p.findall('Now is the winter of our discontent'))
Efficiently split a string using multiple separators and retaining each separator?