import re rx = r"(\{% block (.+?) %}[\s\S]*?\{% endblock %})" s = "{% block some_name %}Some Text{% endblock %} \nSomething Else\n{% block another_name %}Some Other Content{% endblock %}" print(re.findall(rx, s))
Standard input is empty
[('{% block some_name %}Some Text{% endblock %}', 'some_name'), ('{% block another_name %}Some Other Content{% endblock %}', 'another_name')]