fork download
  1. import re
  2.  
  3. test_str = ("%macro msg (name= some_macro) ;\n"
  4. "%put Hello World, my name is &name ;\n"
  5. " %mend ;\n\n"
  6. "%macro msg (name= some_macro) ;\n"
  7. "%put Hello World, my name is &name ;\n"
  8. "%let something happen\n"
  9. "%do something else\n"
  10. "%mend ;")
  11.  
  12. pattern = re.compile(r"%macro.*\r?\n((?:(?!\s*%mend).*\r?\n)+)\s*%mend ;")
  13.  
  14. print(re.findall(pattern, test_str))
Success #stdin #stdout 0.02s 9548KB
stdin
Standard input is empty
stdout
['%put Hello World, my name is &name ;\n', '%put Hello World, my name is &name ;\n%let something happen\n%do something else\n']