Your capturing group isn't capturing the text that you are really looking for:
(?:(?<=^)|(?<=\s))(@[^\s]+)
Now, it works:
>>> re.findall(r'(?:(?<=^)|(?<=\s))(@[^\s]+)', '@one bla bla bla @two @three@four #@five')
['@one', '@two', '@three@four']