I need to match two cases by one reg expression and do replacement 'long.file.name.jpg' -> 'long.file.name_suff.jpg' 'long.file.name_a.jpg' -> 'long.file.name_suff.jpg' I'm trying to do the following re.sub('(\_a)?\.[^\.]*$' , '_suff.',"long.file.name.jpg") But this is cut the extension '.jpg' and I'm getting long.file.name_suff. instead of long.file.name_suff.jpg I understand that this is because of [^.]*$ part, but I can't exclude it, because I have to find last occurrence of '_a' to replace or last '.' Is there a way to replace only part of the match? Continue reading...