Agregar automáticamente espacios después de puntos y comas, mientras se evitan los números

Esta es la expresión regular actual que uso para desinfectar oraciones cuando las personas escriben algo como:

Hola. Soy Andrés, ¿verdad?

Se convertirá automáticamente a:

Hola. Soy Andrés, ¿verdad?

El problema surge cuando hay números dentro de la cadena. Ejemplo:

Tengo 40.381,32 dólares.

… se convertirá en:

Tengo 40. 381, 32 dólares.

Mi código actual:

echo preg_replace( '/[!?,.](?![!?,.\s])/', '$0 ', 'Hello my friend.There should be a space after sentence periods and commas, but that should not apply to 40.381,32 numbers.'); 

Pregunta: ¿cómo puedo evitar que estas reglas se apliquen cuando,. los personajes están entre los números? ¡Gracias!

Usa patrón de expresiones regulares

 (?< !\d)[.,!?](?!\d) 

o

 (?< !\d)[.,!?](?![.,!?\d])