¿Por qué re.sub en Python no funciona correctamente en este caso de prueba?

Prueba este código.

test = ' az z bz z z stuff z  z '
re.sub(r'(\W)(z)(\W)', r'\1_\2\3', test)

Esto debería reemplazar todas las z independientes con _z

Sin embargo, el resultado es:

'az _z bz _z z cosas _z _z'

Ves que hay una z que falta. Teorizo que es porque la agrupación no puede tomar el espacio entre las z para que coincida con dos z a la vez (una para espacios en blanco al final, una para espacios en blanco iniciales). ¿Hay alguna manera de arreglar esto?

Respuestas a la pregunta(4)

Su respuesta a la pregunta