Here is one way you could do this seeing how &
is mixed in and not a word character ...
x <- c('A B C Company', 'XYZ Inc', 'S & K Co', 'A B C D E F G Company')
gsub('(?<!\S\S)\s+(?=\S(?!\S))', '', x, perl=TRUE)
# [1] "ABC Company" "XYZ Inc" "S&K Co" "ABCDEFG Company"
Explanation:
First we assert that two non-whitespace characters do not precede back to back. Then we look for and match whitespace "one or more" times. Next we lookahead to assert that a non-whitespace character follows while asserting that the next character is not a non-whitespace character.
(?<! # look behind to see if there is not:
S # non-whitespace (all but
,
, , f, and " ")
S # non-whitespace (all but
,
, , f, and " ")
) # end of look-behind
s+ # whitespace (
,
, , f, and " ") (1 or more times)
(?= # look ahead to see if there is:
S # non-whitespace (all but
,
, , f, and " ")
(?! # look ahead to see if there is not:
S # non-whitespace (all but
,
, , f, and " ")
) # end of look-ahead
) # end of look-ahead
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…