A abordagem de remover personagens ofensivos é potencialmente problemática. E se houver outro .na corda em algum lugar? Não será removido, embora deva!
Removendo não dígitos ou pontos, a string joe.smith ($3,004.50)se transformaria no não analisável .3004.50.
Imho, é melhor corresponder a um padrão específico e extraí-lo usando um grupo. Algo simples seria encontrar todas as vírgulas, dígitos e pontos contíguos com regexp:
[\d,\.]+
Teste de amostra executado:
Pattern understood as:
[\d,\.]+
Enter string to check if matches pattern
> a2.3 fjdfadfj34 34j3424 2,300 adsfa
Group 0 match: "2.3"
Group 0 match: "34"
Group 0 match: "34"
Group 0 match: "3424"
Group 0 match: "2,300"
Em seguida, para cada correspondência, remova todas as vírgulas e envie para o analisador. Para lidar com o caso de algo como 12.323.344, você pode fazer outra verificação para ver se uma substring correspondente tem no máximo um ..
joe.smith ($3,004.50)? Simplesmente remover classes de personagens ofensivas pode dar errado.