# Fazer diferentes combinações de palavras dentro de uma sentença
# https://pt.stackoverflow.com/q/197911/53463
import re

sujeito_re  = re.compile(r"\b(gato|coelho)\b", re.IGNORECASE)
sentenca_re = re.compile(r"[^\n.]*?\b(subiu|caiu)\b[^\n.,]*?(\d+m\b)", re.IGNORECASE)
resultado = ()

texto = "O gato subiu no telhado de 10m, um homem jogou-lhe uma pedra e ele caiu de uma altura de 20m."


for sujeito in sujeito_re.finditer(texto):
    pos = sujeito.end()
    while True:
        sentenca = sentenca_re.match(texto, pos)
        if not sentenca:
            break
        resultado += (sujeito.group(1) + " " + sentenca.group(1) + " " + sentenca.group(2),)
        pos = sentenca.end()
        
print (resultado)