Sustitución de cuerdas con diccionario, complicaciones con puntuación.

Estoy tratando de escribir un proceso de función (s, d) para reemplazar las abreviaturas en una cadena con su significado completo mediante el uso de un diccionario. donde s es la entrada de la cadena y d es el diccionario. Por ejemplo:

>>>d = {'ASAP':'as soon as possible'}
>>>s = "I will do this ASAP.  Regards, X"
>>>process(s,d)
>>>"I will do this as soon as possible.  Regards, X"

He intentado usar la función de división para separar la cadena y comparar cada parte con el diccionario.

def process(s):
    return ''.join(d[ch] if ch in d else ch for ch in s)

Sin embargo, me devuelve la misma cadena exacta. Tengo la sospecha de que el código no funciona debido a la parada completa detrás de ASAP en la cadena original. Si es así, ¿cómo ignoro la puntuación y hago que sea reemplazado lo antes posible?

Respuestas a la pregunta(7)

Su respuesta a la pregunta