def METHOD_NAME(match):
    current = match.group()
    # treat multi-word sentences word-by-word
    old_words = current.split(" ")
    new_words = new.split(" ")
    out = []
    for old_word, new_word in zip(old_words, new_words):
        result = []
        all_upper = True
        for ind, chr in enumerate(old_word):
            if ind >= len(new):
                break
            if chr.isupper():
                result.append(new_word[ind].upper())
            else:
                result.append(new_word[ind].lower())
                all_upper = False
        # special cases - keep remaing case)
        if new_word.lower() in CASE_WORD_EXCEPTIONS:
            result.append(new_word[ind + 1 :])
        # append any remaining characters from new
        elif all_upper:
            result.append(new_word[ind + 1 :].upper())
        else:
            result.append(new_word[ind + 1 :].lower())
        out.append("".join(result))
    # if we have more new words than old ones, just add them verbatim
    out.extend([new_word for ind, new_word in enumerate(new_words) if ind >= len(old_words)])
    return " ".join(out)