Also du willst \W löschen unter der Voraussetzung das ihm entweder ^ oder \w vorangeht, und unter der Voraussetzung dass ihm \w oder $ folgt.
Ja.s/(^|\w)\W($|\w)/$1$2/g;
sehr unelegant
s/(?<!\W)\W(?!\W)//g;
Welches der beiden Beispiele meintest Du, sei unelegant?
Das erste Beispiel ersetzt bei mir trotz "g" nur das erste Auftreten
(a*u*t*o ==> au*t*o)
Tja die erste Version versagt, wenn zwischen zwei \W nur ein \w ist.
Das liegt daran, dass die Position des Matches durch das Capturing zu weit vorrückt. Da müsste man noch mit dem \G Anker arbeiten.
Versuche die zweite Version.
mfg Beat