import re
regex = re.compile(r"<p>DETAILS[\s\S]*|(<p>.*?<\/p>)|.*")
test_str = ("<info>\n"
"<owner>\n"
"<p>Owners:</p>\n"
"<p>1. New Owner_1</p>\n"
"<p>2. New Owner_2</p>\n"
"</owner>\n"
"<addons>\n"
"<p>Name of dog: Alex</p>\n"
"<p>1. Text blah blah blah</p>\n"
"<p>2. Text blah blah blah</p>\n"
"<p>3. Text blah blah blah</p>\n"
"<p>4. Text blah blah blah</p>\n"
"<p>OR MORE Text blah blah blah</p>\n"
"</addons>\n"
"<p>DETAILS</p>\n"
"<p>1. Vicky Mears 1st dog's owner.</p>\n"
"<p>2. Paul Nash 2nd dog's owner.</p>\n"
"<p>3. Dog found last Apr. 2016</p>\n"
"</info>")
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