import re
regex = re.compile(r"""
<zwr:risicoNiveau>([^<]*?)</zwr:risicoNiveau>\s*
<zwr:numeriekeWaarde>([^<]*?)</zwr:numeriekeWaarde>\s*
<zwr:eenheid>([^<]*?)</zwr:eenheid>\s*
<zwr:hoedanigheid>([^<]*?)</zwr:hoedanigheid>\s*
<zwr:kwaliteitsOordeel>([^<]*?)</zwr:kwaliteitsOordeel>\s*
<zwr:parameterGrootheid>\s*
<zwr:grootheid>([^<]*?)</zwr:grootheid>\s*
(?:<zwr:object>([^<]*?)</zwr:object>\s*)?
</zwr:parameterGrootheid>
""", flags=re.DOTALL | re.VERBOSE)
test_str = ("<zwr:resultaat>\n"
" <zwr:objectBeginTijd>2012-09-18</zwr:objectBeginTijd>\n"
" <zwr:resultaatHistorie>\n"
" <zwr:datumInvoeren>2012-10-31</zwr:datumInvoeren>\n"
" <zwr:invoerder>\n"
" <zwr:voornaam>Joep</zwr:voornaam>\n"
" <zwr:achternaam>Koning, de</zwr:achternaam>\n"
" <zwr:email>jdekoning@hhdelfland.nl</zwr:email>\n"
" <zwr:telefoon>015-2608166</zwr:telefoon>\n"
" <zwr:organisatie>\n"
" <zwr:bedrijfsnaam>Hoogheemraadschap van Delfland</zwr:bedrijfsnaam>\n"
" <zwr:adres>\n"
" <zwr:huisnummer>32</zwr:huisnummer>\n"
" <zwr:postcode>2611AL</zwr:postcode>\n"
" <zwr:straat>Phoenixstraat</zwr:straat>\n"
" <zwr:woonplaats>DELFT</zwr:woonplaats>\n"
" </zwr:adres>\n"
" <zwr:email>info@hhdelfland.nl</zwr:email>\n"
" <zwr:telefoon>(015) 260 81 08</zwr:telefoon>\n"
" <zwr:website>http://www.hhdelfland.nl/</zwr:website>\n"
" </zwr:organisatie>\n"
" </zwr:invoerder>\n"
" </zwr:resultaatHistorie>\n"
" <zwr:risicoNiveau>false</zwr:risicoNiveau>\n"
" <zwr:numeriekeWaarde>0.02</zwr:numeriekeWaarde>\n"
" <zwr:eenheid>kubieke millimeter per liter</zwr:eenheid>\n"
" <zwr:hoedanigheid>niet van toepassing</zwr:hoedanigheid>\n"
" <zwr:kwaliteitsOordeel>Normale waarde</zwr:kwaliteitsOordeel>\n"
" <zwr:parameterGrootheid>\n"
" <zwr:grootheid>Biovolume per volume eenheid</zwr:grootheid>\n"
" \n"
" </zwr:parameterGrootheid>\n"
" <zwr:analyseProces>\n"
" <zwr:analyserendeInstantie>AQUON</zwr:analyserendeInstantie>\n"
" </zwr:analyseProces>\n"
"</zwr:resultaat>\n\n"
"<zwr:resultaat>\n"
" <zwr:objectBeginTijd>2012-09-18</zwr:objectBeginTijd>\n"
" <zwr:resultaatHistorie>\n"
" <zwr:datumInvoeren>2012-10-31</zwr:datumInvoeren>\n"
" <zwr:invoerder>\n"
" <zwr:voornaam>Joep</zwr:voornaam>\n"
" <zwr:achternaam>Koning, de</zwr:achternaam>\n"
" <zwr:email>jdekoning@hhdelfland.nl</zwr:email>\n"
" <zwr:telefoon>015-2608166</zwr:telefoon>\n"
" <zwr:organisatie>\n"
" <zwr:bedrijfsnaam>Hoogheemraadschap van Delfland</zwr:bedrijfsnaam>\n"
" <zwr:adres>\n"
" <zwr:huisnummer>32</zwr:huisnummer>\n"
" <zwr:postcode>2611AL</zwr:postcode>\n"
" <zwr:straat>Phoenixstraat</zwr:straat>\n"
" <zwr:woonplaats>DELFT</zwr:woonplaats>\n"
" </zwr:adres>\n"
" <zwr:email>info@hhdelfland.nl</zwr:email>\n"
" <zwr:telefoon>(015) 260 81 08</zwr:telefoon>\n"
" <zwr:website>http://www.hhdelfland.nl/</zwr:website>\n"
" </zwr:organisatie>\n"
" </zwr:invoerder>\n"
" </zwr:resultaatHistorie>\n"
" <zwr:risicoNiveau>false</zwr:risicoNiveau>\n"
" <zwr:numeriekeWaarde>0.02</zwr:numeriekeWaarde>\n"
" <zwr:eenheid>kubieke millimeter per liter</zwr:eenheid>\n"
" <zwr:hoedanigheid>niet van toepassing</zwr:hoedanigheid>\n"
" <zwr:kwaliteitsOordeel>Normale waarde</zwr:kwaliteitsOordeel>\n"
" <zwr:parameterGrootheid>\n"
" <zwr:grootheid>Biovolume per volume eenheid</zwr:grootheid>\n"
" <zwr:object>Microcystis</zwr:object>\n"
" </zwr:parameterGrootheid>\n"
" <zwr:analyseProces>\n"
" <zwr:analyserendeInstantie>AQUON</zwr:analyserendeInstantie>\n"
" </zwr:analyseProces>\n"
"</zwr:resultaat>")
matches = regex.finditer(test_str)
for match_num, match in enumerate(matches, start=1):
print(f"Match {match_num} was found at {match.start()}-{match.end()}: {match.group()}")
for group_num, group in enumerate(match.groups(), start=1):
print(f"Group {group_num} found at {match.start(group_num)}-{match.end(group_num)}: {group}")
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Python, please visit: https://docs.python.org/3/library/re.html