import re
regex = re.compile(r"<article(?: class=\"lead\")?><a href=\".*\" target=\"_top\"><img(?: height=\".*\")? src=\"(.*)\"(?: width=\".*\")? \/><\/a><h[1,2]><a href=\"(.*)\" target=\"_top\">(.*)<\/a><\/h[1,2]><small>By .*<\/small><small>Updated: (.*) - (.*)<\/small><div class=\"clear\"><\/div><\/article>")
test_str = "<section class=\"news\"><article class=\"lead\"><a href=\"/2016/04/15/what-are-the-10-most-intriguing-games-of-the-2016-nfl-season/a6ikhoo/\" target=\"_top\"><img src=\"/_internal/cimg!0/8p7xcgnjxaoqjj4iwxfv1qlid4ag0mm\" /></a><h1><a href=\"/2016/04/15/what-are-the-10-most-intriguing-games-of-the-2016-nfl-season/a6ikhoo/\" target=\"_top\">What are the 10 most intriguing games of the 2016 NFL season?</a></h1><small>By NATE ATKINS and ARTHUR ARKUSH</small><small>Updated: April 15, 2016 - 9:08 am</small><div class=\"clear\"></div></article><div class=\"clear\"></div></section><div class=\"bigbox ad\"></div><section class=\"news secondary\"><article><a href=\"/2016/04/08/green-bay-packers-cut-ilb-nate-palmer-10-game-starter-in-2015/afybdi5/\" target=\"_top\"><img height=\"225\" src=\"/_internal/cimg!0/pes2uiv39y78ld1yezq38oqcz3invi8\" width=\"400\" /></a><h2><a href=\"/2016/04/08/green-bay-packers-cut-ilb-nate-palmer-10-game-starter-in-2015/afybdi5/\" target=\"_top\">Green Bay Packers cut ILB Nate Palmer, 10-game starter in 2015</a></h2><small>By ARTHUR ARKUSH -- aarkush@profootballweekly.com</small><small>Updated: April 8, 2016 - 4:01 pm</small><div class=\"clear\"></div></article><article><a href=\"/2016/04/08/jacksonville-jaguars-aaron-colvin-and-green-bay-packers-demetri-goodson-suspended-4-games-each-for-peds/ahkwuh8/\" target=\"_top\"><img height=\"225\" src=\"/_internal/cimg!0/5jn3lvqyt16zr6tg7yqrhsavrr3eh45\" width=\"400\" /></a><h2><a href=\"/2016/04/08/jacksonville-jaguars-aaron-colvin-and-green-bay-packers-demetri-goodson-suspended-4-games-each-for-peds/ahkwuh8/\" target=\"_top\">Jacksonville Jaguars' Aaron Colvin and Green Bay Packers' Demetri Goodson suspended 4 games each for PEDs</a></h2><small>By ARTHUR ARKUSH -- aarkush@profootballweekly.com</small><small>Updated: April 8, 2016 - 3:23 pm</small><div class=\"clear\"></div></article></section>"
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