In reply to Climber_Bill:
Regex is horrible even when it works. Worse that VB.NET.
Lots of possibilities though...
Tokenising using Split is awkward because you actually want the tokens to remain.
How about repeatedly attempting a operations like
s = s.Replace(" ,", ",")
Until the string stops getting shorter?
Strategies where you have a discovery pass to identify changes followed by a single pass to remove might be a goer. Discovery pass might involve working through the string from back to front as it is spaces before punctuation that you want to nail.