Substituição de corda por dicionário, complicações com pontuação

Eu estou tentando escrever um processo de função (s, d) para substituir abreviações em uma seqüência de caracteres com seu significado completo usando um dicionário. onde s é a entrada da string e d é o dicionário. Por exemplo:

>>>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"

Eu tentei usar a função split para separar a string e comparar cada parte com o dicionário.

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

No entanto, ele me retorna a mesma string exata. Eu tenho uma suspeita de que o código não funciona por causa do ponto final por trás do ASAP na string original. Se sim, como ignoro a pontuação e faço com que o ASAP seja substituído?

questionAnswers(7)

yourAnswerToTheQuestion