=TEXTJOIN(" ", TRUE, MAP(SPLIT(REGEXREPLACE(A1, "([.!?:])", "$1|"), "|"), LAMBDA(segment,
LET(
trimmed, TRIM(segment),
IF(trimmed="", "",
LET(
words, SPLIT(trimmed, " "),
punc, REGEXEXTRACT(trimmed, "[.!?:]$"),
clean_words, IF(ISERROR(punc), words, SPLIT(SUBSTITUTE(trimmed, punc, ""), " ")),
formatted, MAP(SEQUENCE(1, COUNTA(clean_words)), LAMBDA(i,
LET(
w, INDEX(clean_words, i),
is_all_caps, EXACT(w, UPPER(w)),
is_first, i=1,
is_single_a, LOWER(w)="a",
IF(is_all_caps, w,
IF(is_first, REPLACE(LOWER(w), 1, 1, UPPER(LEFT(w, 1))),
IF(is_single_a, "a", LOWER(w))
)
)
)
)),
TEXTJOIN(" ", TRUE, formatted) & IF(ISERROR(punc), "", punc)
)
)
)
)))