import re
regex = re.compile(r"(<svg .*?)(width=\".*?\").*?(?:height=\".*?\")(.*?>)", flags=re.MULTILINE)
test_str = ("<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"24\" xml:space=\"preserve\">\n"
" <path d=\"M13 5h-1V4h1M8 5H7V4h1m5.5-1.8L14.8.9c.2-.2.2-.5 0-.7-.2-.2-.5-.2-.7 0l-1.5 1.5c-.7-.5-1.7-.7-2.6-.7-1 0-1.9.2-2.7.6L5.8.1c-.1-.1-.5-.1-.6 0-.2.2-.2.5 0 .7l1.3 1.3C5 3.3 4 5 4 7h12c0-2-1-3.7-2.5-4.8m5 5.8c-.8 0-1.5.7-1.5 1.5v7c0 .8.7 1.5 1.5 1.5s1.5-.7 1.5-1.5v-7c0-.8-.7-1.5-1.5-1.5m-17 0C.7 8 0 8.7 0 9.5v7c0 .8.7 1.5 1.5 1.5S3 17.3 3 16.5v-7C3 8.7 2.3 8 1.5 8M4 18c0 .6.4 1 1 1h1v3.5c0 .8.7 1.5 1.5 1.5S9 23.3 9 22.5V19h2v3.5c0 .8.7 1.5 1.5 1.5s1.5-.7 1.5-1.5V19h1c.6 0 1-.4 1-1V8H4v10z\"/>\n"
"</svg>\n")
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