def replacement_func(match, repl_pattern):
    match_str = match.group(0)
repl = ''.join([(r_char if m_char.islower() else r_char.upper()) for r_char,
    m_char in zip(repl_pattern, match_str)])
repl += repl_pattern[len(match_str):]
return repl
input_str = 'myStrIngFullOfStUfFiWannAReplaCE_StUfFs'
print(re.sub('stuff', lambda m: replacement_func(m, 'banana'), input_str,
    flags=re.I))
Лучший способ сделать замену без учета регистра, но соответствовать регистру заменяемого слова?