Separación de cadenas en el formato requerido, ¿forma pitónica? (con o sin Regex)

Tengo una cadena en el formato:

t='@abc @def Hello this part is text'

Quiero obtener esto:

l=["abc", "def"] 
s='Hello this part is text'

Hice esto

a=t[t.find(' ',t.rfind('@')):].strip()
s=t[:t.find(' ',t.rfind('@'))].strip()
b=a.split('@')
l=[i.strip() for i in b][1:]

Funciona en su mayor parte, pero falla cuando la parte de texto tiene la '@'. Por ejemplo, cuando:

t='@abc @def My email is [email protected]'

fracasa. Los @names están allí al principio y puede haber texto después de @names, que posiblemente contenga @.

Claramente puedo agregar inicialmente un espacio y descubrir la primera palabra sin '@'. Pero eso no parece una solución elegante.

¿Cuál es una forma pitónica de resolver esto?

Respuestas a la pregunta(7)

Su respuesta a la pregunta