In [14]:
import re
pattern_not = re.compile(r'([^\dA-Za-z]+)')

In [15]:
under = lambda name: re.sub(pattern_not, '_', name)

In [16]:
under('A@a-1').lower()


Out[16]:
'a_a_1'

In [ ]: