Вот способ использования re.sub
с отрицательным прогнозом:
re.sub(r'ab(?![xy])', '', s)
s = '123ab456'
re.sub(r'ab(?![xy])', '', s)
# '123456'
s = '123abx456'
re.sub(r'ab(?![xy])', '', s)
# '123abx456'
Подробности
ab(?![xy])
ab
буквально соответствует символам ab (с учетом регистра)(?![xy])
[xy]
xy
соответствует одному символу в списке xy
(с учетом регистра)