>>> text
'blah. ! blah (beeep?) heap :) :) :)'
>>> re.sub(':(?!\))|(?<!:)\)|[^\w\s:)]', '', text)
'blah blah beeep heap :) :) :)'
>>> from functools import partial
>>> smile = ':)'
>>> regex = partial(re.sub, '[^\w\s]', '')
>>> smile.join(map(regex, text.split(smile)))
'blah blah beeep heap :) :) :)'