Осторожно, лингвист! [А на вашем трупе, молодой человек, они бы еще и попрыгали...]
кат не ставится, гомен...


PUNCTUATION = [' ', '!', '@', '#', '/', '%', '^', '&', '*', '(', ')', '_', '-', '=', '|', ':', ';', '?', '/', '>', '.', '<', ',', '~', '`']

def split_string(s):
'''
>>> split_string (' Shakal, shagal shakal shagal! vse shagal i shagal ')
['Shakal', 'shagal', 'shakal', 'shagal', 'vse', 'shagal', 'i', 'shagal']
'''
return [word for word, pos in tuplostring(s)]


def tuplostring(s):
'''
>>> tuplostring (' Shakal shagal shakal shagal vse shagal i, shagal ')
[('Shakal', 1), ('shagal', 8), ('shakal', 15), ('shagal', 22), ('vse', 29), ('shagal', 33), ('i', 40), ('shagal', 43)]
'''
l, d = [], 0
for i, c in enumerate(s):
if c in PUNCTUATION:
if d < i:
l.append((s[d:i], d))
d = i + 1
if c != ' ':
l.append((s[d:], d))
return l

if __name__ == '__main__':
import doctest
doctest.testmod()

@настроение: ыыыыыыыыыы... я все неправильно сделал, но я все-таки крут)))

@темы: будни, гордое до невозможности, задушенный шакал, восторгательное