What associativity was it again
Retina 0.8.2, 61 bytes

+1`(\(((\()|(?&lt;-3&gt;\))|[^()])+(?(3)$)\)|[^()]){2}(?=[^)])
($&amp;)


Try it online! Link includes test cases. Explanation: I'd really like to use a recursive regex (([^()]|\((?1)\)){2})(?=[^)]) here, but .NET only has balancing groups, so it's a bit verbose.

+1`


Repeatedly replace the first match each time. This ensures left-associativity.

(           Either
 \(          Match outer `(`
 (           Either
  (\()        Capture a `(` into $3
 |           Or
  (?&lt;-3&gt;\))   A `)` if it matched an earlier `(`
 |           Or
  [^()]       Something else
 )+          Match as much of the above as possible
 (?(3)$)     But don't leave `(`s unmatched
 \)          Match outer `)`
|           Or
 [^()]       Match something else
){2}        Match the above twice
(?=[^)])    Followed by a non-`)`


Either, a ( followed by a string containing balanced ()s,  followed by a ), or a non-(), twice, followed by a non-). This represents an ambiguous match.

($&amp;)


Wrap the match in disambiguating parentheses.