Les alternatives dans les regex sont testées dans l'ordre que vous indiquez, donc si la première branche correspond, la regex ne vérifie pas les autres branches. Cela n'a pas d'importance si vous avez seulement besoin de tester la correspondance, mais si vous voulez extraire du texte en fonction de la correspondance, alors cela a de l'importance.
Le tri par longueur n'est nécessaire que lorsque les chaînes les plus courtes sont des sous-chaînes des chaînes les plus longues. Par exemple, lorsque vous avez un texte :
supermanutd
supermanu
superman
superm
puis avec votre premier Rx vous obtiendrez :
>>> regex.findall(string)
[u'supermanutd', u'supermanu', u'superman', u'superm']
mais avec un deuxième Rx :
>>> regex.findall(string)
[u'super', u'super', u'super', u'super', u'super']
Testez vos expressions rationnelles avec http://www.pythonregex.com/