fork download
  1. import re
  2.  
  3. regex = r"^room \d+(?:\n(?!room \d|service prov).*)*\nservice prov.*(?:\n(?!room|exit).*)*\nexit$"
  4.  
  5. test_str = ("room 31\n"
  6. "name \"Bob\"\n"
  7. "no TV outlet 49\n"
  8. "exit\n"
  9. "room 5\n"
  10. "name \"Ted\"\n"
  11. "service prov 10.1\n"
  12. "outlet 49-50,52\n"
  13. "exit\n"
  14. "room 80\n"
  15. "name \"Alice\"\n"
  16. "outlet 49-50,52\n"
  17. "dead outlet 1-20\n"
  18. "exit\n"
  19. "room 50\n"
  20. "name \"Tim\"\n"
  21. "outlet 49\n"
  22. "exit\n"
  23. "room 51\n"
  24. "name \"Sue\"\n"
  25. "service prov 10.2.0\n"
  26. "outlet 49\n"
  27. "exit")
  28.  
  29. print(re.findall(regex, test_str, re.MULTILINE))
  30.  
  31.  
Success #stdin #stdout 0.02s 9460KB
stdin
Standard input is empty
stdout
['room 5\nname "Ted"\nservice prov 10.1\noutlet 49-50,52\nexit', 'room 51\nname "Sue"\nservice prov 10.2.0\noutlet 49\nexit']