Проблема связана с поиском, который возвращает первое вхождение шаблона, а не целое. Синтаксис sub: re.sub (pattern, repl, string, max = 0). Пропустите max = 0, шаблон - это шаблон, который нужно заменить на repl, а строка - это текст.
print(re.sub(r'[a-zA-Z0-9]',"","ABCD&EFab^cdef12%3450"))