Matching homologous groups
Python 3, 134 bytes
-3 bytes thanks to @tsh
Note that it fails for CH_2. It is unclear whether such a test case is valid, but I will keep this solution for now.

lambda e:['Aldehyde','Alcohol','Carboxylic Acid',0][e[::-1].rfind('O')]or'Alk%sne'%'eay'[eval(e.translate({67:45,72:43,95:43})+'//2')]

Try it online!
Python 3, 137 bytes
Works for all cases including CH_2.

lambda e:['Aldehyde','Alcohol','Carboxylic Acid',0][e[::-1].rfind('O')]or'Alk%sne'%'yae'[eval(e.translate({67:43,72:43,95:'~-'})+'//-2')]

Try it online!