Reemplazo de la cadena Python basado en los caracteres NO en RegEx

¿Es posible crear un reqex que encuentre caracteres que NO son un conjunto específico?

En lugar de incluir en la lista negra un montón de caracteres y reemplazarlos, me sería más fácil permitir un determinado conjunto y reemplazar los caracteres que no están en ese conjunto.

Mi conjunto se ve así: [.a-zA-Z0-9]

Me gustaría hacer algo como esto:

clean_filename = re.sub(r'([.a-zA-Z0-9])', "_", filename) 

Obviamente, este código reemplazaría los caracteres que deseo conservar. ¿Hay alguna manera de reemplazar los caracteres que NO están en ese conjunto?

Sí, use el “modificador” de negación ^ : r'[^.a-zA-Z0-9]'

 clean_filename = re.sub(r'[^.a-zA-Z0-9]', "_", filename) 

Intenta con:

 re.sub(r'[^a-zA-Z0-9]', "_", filename)