da war ich doch zu schnell.
Dein Beispiel löscht wenn mehr als 2 Sonderzeichen, aber nicht, wenn genau ein Zeichen.
Sag ich doch.
Also du willst \W löschen unter der Voraussetzung das ihm entweder ^ oder \w vorangeht, und unter der Voraussetzung dass ihm \w oder $ folgt.
s/(^|\w)\W($|\w)/$1$2/g;
sehr unelegant
s/(?<!\W)\W(?!\W)//g;
Da stellt sich nur die Frage, ob das deine Sprache unterstützt.
mfg Beat