zwijanie białych znaków w łańcuchu

Mam ciąg, który wygląda tak:

"stuff   .  // : /// more-stuff .. .. ...$%$% stuff -> DD"

i chcę usunąć wszystkie znaki interpunkcyjne, uczynić wszystko wielkimi literami i zwinąć wszystkie białe znaki, aby wyglądały tak:

"STUFF MORE STUFF STUFF DD"

Czy jest to możliwe w przypadku jednego wyrażenia regularnego, czy muszę połączyć więcej niż dwa? Oto, co mam do tej pory:

def normalize(string):
    import re

    string = string.upper()

    rex   = re.compile(r'\W')
    rex_s = re.compile(r'\s{2,}')

    result = rex.sub(' ', string) # this produces a string with tons of whitespace padding
    result = rex.sub('', result) # this reduces all those spaces

    return result

Jedyną rzeczą, która nie działa, jest zawijanie białych znaków. Jakieś pomysły?

questionAnswers(5)

yourAnswerToTheQuestion