Por que o re.sub no Python não funciona corretamente neste caso de teste?

Experimente este código.

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

Isso deve substituir todos os zs independentes por _z

No entanto, o resultado é:

'az _z bz _z z coisas _z _z'

Você vê que há um z que está faltando. Eu teorizo que é porque o agrupamento não pode pegar o espaço entre os zs para corresponder a dois zs de uma vez (um para espaços em branco à direita, outro para espaços em branco à esquerda). Existe uma maneira de corrigir isso?

questionAnswers(4)

yourAnswerToTheQuestion