Eu concordo com o Andreas. Agora, se essa for uma tarefa única que você pode dividir em várias etapas, sugiro excluir temporariamente as exceções primeiro, provavelmente usando um caractere não usado de outra forma e, em seguida, retrocedendo mais tarde. Aqui está um Find e um Substituir:
\b(I|God|Dad)\b
@
Isso nos dá algo assim (observe que eu e o meu não estamos em maiúsculas em inglês):
Did @I write this to @God, @Dad, or my wife? After a lifetime in the
French diplomatic corps, the Count de Gruse lived with his wife
in an elegant townhouse on Quai Voltaire! He was a likeable man,
cultivated of course, with a well-deserved reputation as a
generous host and an amusing raconteur.
A partir daí, você pode usar um case-sensitive regex e um look-behind-negativo para encontrar palavras maiúsculas precedidas por um ou mais espaços que não seguem um limite de sentença:
(?<![.?'!"])[ ]+[A-Z]
Observe que isso falhará no texto de capa dura, como "Francês" no exemplo, como mostrei acima.
O Regex pode ser bastante frágil, então algo assim pode exigir um pequeno programa / script, se não for uma tarefa única. (Ou talvez possivelmente uma macro.)
Dito isto, aqui está o que você pediu, incorporando também o lookahead negativo para fazer tudo em uma única etapa. :)
(?<![.?'!"]) (?!Dad\b|God\b|I\b)[A-Z]
DICA: se você não tem ou não prefere usar a caixa de seleção sensível a maiúsculas e minúsculas, é possível colocar isso na frente do regex:
(?c)