Todas las soluciones propuestas hasta ahora no son compatibles con Unicode o permitir que un número en el primer carácter si se ejecuta en Python 3.
Editar: las soluciones propuestas solo se deben usar en Python 2, y en Python3 se debe usar isidentifier
. Aquí es una solución que debería funcionar en cualquier lugar:
re.match(r'^\w+$', name, re.UNICODE) and not name[0].isdigit()
Básicamente, se comprueba si algo se compone de (al menos 1) caracteres (incluyendo números), y después se comprueba que el primer carácter no es un número.
Tenga en cuenta que esto no funciona con símbolos Unicode, p. ''éllo'' – Almar