^
(среди прочих имен 'hat' или 'caret') в регулярном выражении означает "начало строки" (или, с учетом определенных параметров, "начало строки"), которое вас не волнует,Отказ от этого заставляет ваше регулярное выражение работать нормально:
>>> re.findall(r'\'+\w+\'', s)
["'Tom'", "'Harry'", "'rock'"]
Регулярные выражения, предложенные другими, могут быть лучше для того, чего вы пытаетесь достичь, это минимальное изменение для решения вашей проблемы.