using re adds white-space before and after the desired characters:
import re
pat = re.compile(r"([.()!])")
print (pat.sub(" 1 ", string))
# hello . . . ( world ) !
import re
pat = re.compile(r"([.()!])")
print (pat.sub(" 1 ", string))
# hello . . . ( world ) !