Philippine troops have found the remains of a German hostage who was beheaded by Abu Sayyaf militants in the country's south after a ransom deadline lapsed.

Regional military commander Maj. Gen. Carlito Galvez Jr. says marines dug up the head and body of Juergen Gustav Kantner late Saturday in the mountainous hinterlands of Indanan town in Sulu province, where the militants are holding several foreign and local hostages.

President Rodrigo Duterte apologized to Germany and Kantner's family after government forces failed to rescue him during his nearly four months of captivity.

About two dozen Filipino troops were wounded in clashes that also killed 16 Abu Sayyaf gunmen in efforts to find and rescue Kantner, who was seized from a yacht off Malaysia's Sabah state in November.