input_list = ['happy_feet', 'happy_hats_for_cats', 'sad_fox_or_mad_banana',
    'sad_pandas_and_happy_cats_for_people']
pattern = re.compile('_(?:{})_'.format('|'.join([re.escape(w) for w in
    keywords])))
list(chain.from_iterable(pattern.split(w) for w in input_list))
Разделение строки на основе определенного набора слов