I was asked this question on stackoverflow, and figured I’d repost it here since I wrote it after all.
s = "-this is. A - sentence;one-word what's"
re.findall("\w+-\w+|[\w']+",s)
result: ['this', 'is', 'A', 'sentence', 'one-word', "what's"]
make sure you notice that the correct ordering is to look for hypenated words first!