Ggf. auch noch ein Leerzeichen nach der schließenden Klammer, also
"\([^)]\) ?"
Ich glaube, da warst Du etwas zu eilig. Diese Regex findet: Eine Klammer-auf, EIN Zeichen, das nicht Klammer-zu ist, eine Klammer-zu und eventuell ein Space. Also zum Beispiel "(x)" oder "(y) ", aber nicht "(hallo)". Es fehlt ein + hinter der rechten eckigen Klammer.
Aber nicht nur. Man muss noch auf die Gierigkeit der Quantifizierer aufpassen Ein Pattern wie \([^)]+\)
findet in "Das ist (heute) nicht (naja) bestes Wetter" den Substring "(heute) nicht (naja)". Um das zu verhindern, muss man dem Quantifizierer die Gier abgewöhnen, entweder durch ein nachgestelltes Fragezeichen am Quantifizierer oder durch die lokale Regex-Option U.
Das Pattern wäre also "/\s*([^)]?)\s/U", sprich: eventuell Leerraum, dann der Klammerausdruck, dann eventuell nochmal Leerraum. Und dann die U Option. Achtung, großes U, das kleine u ist für UTF-8. Als Ersatz-String nimmst Du ein einzelnes Space, damit Du nach Ersetzen nicht mehrere Leerstellen im String hast. Ganz sauber ist es nicht, wenn z.B. ein Satzzeichen direkt hinter der Klammergruppe steht, hast Du nachher eine Leerstelle vor dem Satzzeichen. Wie man das genau feintuned, habe ich mir jetzt nicht überlegt. Eventuell reicht es, nur die Leerräume VOR der Klammergruppe zu matchen.
Was damit nicht funktioniert, sind Strings mit geschachtelten Klammern. Dafür bräuchtest Du vermutlich rekursive Regexe, aber damit kenne ich mich nicht aus. Wenn Du solche Strings ausschließen kannst, ist alles gut. Natürlich könntest Du auch eine Regex bauen die sowas erkennt 😉
Rolf