x <- "(pop+corn+unicorn)-bread+salt+malt" gsub("\\+(?=[^()]*\\))", "|", x, perl=TRUE) gsub("(?:\\G(?!^)|\\()[^()]*?\\K\\+", "|", x, perl=TRUE)