fork download
  1. # Fazer diferentes combinações de palavras dentro de uma sentença
  2. # https://pt.stackoverflow.com/q/197911/53463
  3. import re
  4.  
  5. sujeito_re = re.compile(r"\b(gato|coelho)\b", re.IGNORECASE)
  6. sentenca_re = re.compile(r"[^\n.]*?\b(subiu|caiu)\b[^\n.,]*?(\d+m\b)", re.IGNORECASE)
  7. resultado = ()
  8.  
  9. texto = "O gato subiu no telhado de 10m, um homem jogou-lhe uma pedra e ele caiu de uma altura de 20m."
  10.  
  11.  
  12. for sujeito in sujeito_re.finditer(texto):
  13. pos = sujeito.end()
  14. while True:
  15. sentenca = sentenca_re.match(texto, pos)
  16. if not sentenca:
  17. break
  18. resultado += (sujeito.group(1) + " " + sentenca.group(1) + " " + sentenca.group(2),)
  19. pos = sentenca.end()
  20.  
  21. print (resultado)
Success #stdin #stdout 0.02s 28384KB
stdin
Standard input is empty
stdout
('gato subiu 10m', 'gato caiu 20m')