# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility
import re
regex = r"GameID=(\d+)\">[^>]+>\s+(?<first_team>[^>]+)?\s+vs\s+[^>]+>\s+(?<second_team>Brisbane)\s+(?!upcoming)<"
test_str = ("\n"
"<!DOCTYPE html>\n"
"<html lang=\"en\">\n"
" <head>\n"
" <meta charset=\"utf-8\">\n"
" <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n"
" <meta name=\"mobile-web-app-capable\" content=\"yes\">\n"
" <link rel=\"icon\" sizes=\"196x196\" href=\"http://dtlive.com.au/afl/images/dtliveicon.png\">\n"
" <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n"
" <meta name=\"description\" content=\"dtlive.com.au AFL Fantasy and Real Dream Team website. Live scores, in depth stats in a clean easy to use format\"><title>DTLive.com.au - AFL Fantasy and Real Dream Team website. Live scores, in depth stats in a clean easy to use format</title> <script src=\"https://code.jquery.com/jquery-1.10.2.min.js\"></script>\n"
" <script src=\"http://dtlive.com.au/afl/embedapi-master/src/ustream-embedapi.js\"></script>\n"
" <link href=\"//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css\" rel=\"stylesheet\">\n\n"
" <!-- Bootstrap -->\n"
" <link rel=\"stylesheet\" href=\"//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css\">\n"
" <script src=\"//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js\"></script>\n\n"
" <!-- Custom styles for this template -->\n"
" <link href=\"http://dtlive.com.au/afl/starter-template2.css\" rel=\"stylesheet\">\n\n"
" <!--[if lt IE 9]><script src=\"../../docs-assets/js/ie8-responsive-file-warning.js\"></script><![endif]-->\n"
" <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->\n"
" <!--[if lt IE 9]>\n"
" <script src=\"https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js\"></script>\n"
" <script src=\"https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js\"></script>\n"
" <![endif]-->\n"
" <script>\n"
" (function($){\n"
" $(document).ready(function(){\n"
" $('ul.dropdown-menu [data-toggle=dropdown]').on('click', function(event) {\n"
" event.preventDefault(); \n"
" event.stopPropagation(); \n"
" $(this).parent().siblings().removeClass('open');\n"
" $(this).parent().toggleClass('open');\n"
" });\n"
" });\n"
" })(jQuery);\n"
" </script>\n"
" <style>\n"
" .marginBottom-0 {margin-bottom:0;}\n\n"
" .dropdown-submenu{position:relative;}\n"
" .dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px;}\n"
" .dropdown-submenu>a:after{display:block;content:\" \";float:right;width:0;height:0;border-color:transparent;border-style:solid;border-width:5px 0 5px 5px;border-left-color:#cccccc;margin-top:5px;margin-right:-10px;}\n"
" .dropdown-submenu:hover>a:after{border-left-color:#555;}\n"
" .dropdown-submenu.pull-left{float:none;}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px;}\n"
" .dropdown-nowidepad { width: 48px !important; padding-right: 0px !important; padding-left: 0px !important; }\n"
" </style>\n"
" </head>\n"
"<body>\n"
"<nav class=\"navbar navbar-inverse navbar-fixed-top\" role=\"navigation\">\n"
" <div class=\"container\"><div class=\"col-xs-12\">\n"
" <div class=\"navbar-header\">\n"
" <button type=\"button\" class=\"navbar-toggle\" data-toggle=\"collapse\" data-target=\"#navbar-collapse-1\">\n"
" <span class=\"sr-only\">Toggle navigation</span>\n"
" <span class=\"icon-bar\"></span>\n"
" <span class=\"icon-bar\"></span>\n"
" <span class=\"icon-bar\"></span>\n"
" </button>\n"
" <a class=\"navbar-brand\" href=\"http://www.dtlive.com.au\" style=\"padding: 15px 5px 15px 5px !important\">DTLive</a>\n"
" </div>\n"
" \n"
" <div class=\"collapse navbar-collapse\" id=\"navbar-collapse-1\">\n"
" <ul class=\"nav navbar-nav\">\n"
" <li><a href=\"http://dtlive.com.au/premium/\" style=\"padding: 0px 5px 0px 5px !important;\"><img src=\"http://www.dtlive.com.au/images/premium.png\"></a></li> \n\n"
" <li class=\"dropdown\"><a href=\"http://www.dtlive.com.au/afl/\" class=\"dropdown-toggle dropdown-nowidepad\" data-toggle=\"dropdown\"><img src=\"http://www.dtlive.com.au/images/aflnav_24.png\"> <b class=\"caret\"></b></a>\n"
" <ul class=\"dropdown-menu\">\n"
" <li>\n"
" <form class=\"navbar-form navbar-left\" role=\"search\" action=\"http://dtlive.com.au/afl/playersearch.php\">\n"
" <div class=\"input-group\">\n"
" <input type=\"text\" class=\"form-control\" placeholder=\"Player Search\" name=\"SearchString\" id=\"srch-term\">\n"
" <div class=\"input-group-btn\"><button class=\"btn btn-default\" type=\"submit\"><i class=\"glyphicon glyphicon-search\"></i></button></div>\n"
" </div>\n"
" </form>\n"
" </li>\n"
" <li><a href=\"http://www.dtlive.com.au/afl/\">AFL Home</a></li>\n"
" <li><a href=\"http://dtlive.com.au/afl/dataview.php\">Data View</a></li>\n"
" <li><a href=\"http://www.dtlive.com.au/afl/drawingboard/\">Drawing Board</a></li>\n"
" <li><a href=\"http://dtlive.com.au/afl/projector.php\">Projector</a></li>\n"
" <li><a href=\"http://dtlive.com.au/afl/teamicons.php\">Team Icons</a></li>\n"
" <li><a href=\"http://dtlive.com.au/afl/teamstats.php\">Team Stats</a></li>\n"
" <li><a href=\"http://dtlive.com.au/afl/heatmaps.php\">Heat Maps</a></li>\n"
" <li><a href=\"http://dtlive.com.au/afl/calvin.php\">Calvins Captains</a></li>\n"
" <li><a href=\"http://dtlive.com.au/afl/myplayers.php\">My Players</a></li>\n"
" <li class=\"divider\"></li>\n"
" <li class=\"dropdown dropdown-submenu\"><a href=\"#\" class=\"dropdown-toggle\" data-toggle=\"dropdown\"><img src=\"http://dtlive.com.au/images/dttalknav.jpg\"> DT Talk</a>\n"
" <ul class=\"dropdown-menu\"><li><a href=\"http://dreamteamtalk.com/?p=49141\" target=\"_blank\">Moneyball's $5000 Sunday Funday is upon us!</a></li><li><a href=\"http://dreamteamtalk.com/?p=49147\" target=\"_blank\">Handball happy - Rd 2 Fantasy Review</a></li><li><a href=\"http://dreamteamtalk.com/?p=49152\" target=\"_blank\">My Team 2017 - Round 3</a></li><li><a href=\"http://dreamteamtalk.com/?p=49156\" target=\"_blank\">The Weekend Wash-Up - Round 2</a></li><li><a href=\"http://dreamteamtalk.com/?p=49161\" target=\"_blank\">Fix ‘er up - Ep. 126</a></li></ul>\n"
" </li>\n"
" <li class=\"dropdown dropdown-submenu\"><a href=\"#\" class=\"dropdown-toggle\" data-toggle=\"dropdown\"><img src=\"http://dtlive.com.au/images/coachespanel.jpg\"> Coaches Panel</a>\n"
" <ul class=\"dropdown-menu\"><li><a href=\"http://coachespanel.com.au/?p=9912\" target=\"_blank\">Makers and Breakers - Round 2</a></li></ul>\n"
" </li>\n"
" </ul>\n"
" </li>\n\n"
" <li class=\"dropdown\"><a href=\"http://www.dtlive.com.au/bbl/\" class=\"dropdown-toggle dropdown-nowidepad\" data-toggle=\"dropdown\"><img src=\"http://www.dtlive.com.au/images/bblnav_24.png\"> <b class=\"caret\"></b></a>\n"
" <ul class=\"dropdown-menu\">\n"
" <li><a href=\"http://www.dtlive.com.au/bbl/\">BBL Home</a></li> </ul>\n"
" </li>\n\n\n"
" <li class=\"dropdown\"><a href=\"http://www.dtlive.com.au/nbl/\" class=\"dropdown-toggle dropdown-nowidepad\" data-toggle=\"dropdown\"><img src=\"http://www.dtlive.com.au/images/nblnav_24.png\"> <b class=\"caret\"></b></a>\n"
" <ul class=\"dropdown-menu\">\n"
" <li><a href=\"http://www.dtlive.com.au/nbl/\">NBL Home</a></li>\n"
" <li><a href=\"http://dtlive.com.au/nbl/myround.php\">My Team</a></li>\n"
" <li><a href=\"http://dtlive.com.au/nbl/stats.php\">Stats</a></li>\n"
" </ul>\n"
" </li>\n"
" </ul>\n\n"
" <ul class=\"nav navbar-nav navbar-right\">\n"
" <li><a href=\"http://dtlive.com.au/register.php\">Sign Up</a></li>\n"
" <li class=\"dropdown\">\n"
" <a href=\"http://dtlive.com.au/login.php\" class=\"dropdown-toggle\" data-toggle=\"dropdown\">Sign in <b class=\"caret\"></b></a>\n"
" <ul class=\"dropdown-menu\" style=\"padding: 15px;min-width: 250px;\">\n"
" <li>\n"
" <div class=\"row\">\n"
" <div class=\"col-md-12\">\n"
" <form class=\"form\" role=\"form\" method=\"post\" action=\"/afl/viewgames.php\" accept-charset=\"UTF-8\" id=\"login-nav\">\n"
" <div class=\"form-group\"><input type=\"text\" class=\"form-control\" name=\"user\" id=\"user\" placeholder=\"Username\" required></div>\n"
" <div class=\"form-group\"><input type=\"password\" class=\"form-control\" name=\"pass\" id=\"pass\" placeholder=\"Password\" required></div>\n"
" <div class=\"form-group\"><input type=\"submit\" name=\"sublogin\" class=\"btn btn-success btn-block\" value=\"Login\"></div>\n"
" </form>\n"
" <hr><a href=\"https://www.facebook.com/dialog/oauth?client_id=695932313759732&redirect_uri=http%3A%2F%2Fdtlive.com.au%2Fafl%2Fviewgames.php%3FDoFacebookLogin%3DYes%26&state=96849fa138d10e32c196eb1cd2d2ed62&sdk=php-sdk-3.2.3\" class=\"btn btn-primary btn-block\" style=\"color: #FFF !important;\">Login using Facebook</a>\n"
" <hr><a href=\"../forgotpass.php\" class=\"btn btn-warning btn-block\">Forgotten Password?</a>\n"
" </div>\n"
" </div>\n"
" </li>\n"
" </ul>\n"
" </li>\n"
" </ul>\n"
" </div></div>\n\n"
" </div><!-- /.navbar-collapse -->\n"
"</nav>\n"
"<div class=\"container\">\n"
"<div class=\"row\"> </div><div class=\"row\"><h2>2017 Premiership Season</h2></div><div class=\"row\"><h4>Round 3</h4></div><div class=\"row\"><h4><a href=\"livescores.php?GameID=1153\"><img src=\"images/SYD.png\"> Sydney vs <img src=\"images/COL.png\"> Collingwood (upcoming)</a></h4></div><div class=\"row\"><h4><a href=\"livescores.php?GameID=1154\"><img src=\"images/NME.png\"> North Melbourne vs <img src=\"images/GWS.png\"> GWS Giants (upcoming)</a></h4></div><div class=\"row\"><h4><a href=\"livescores.php?GameID=1155\"><img src=\"images/RIC.png\"> Richmond vs <img src=\"images/WCE.png\"> West Coast (upcoming)</a></h4></div><div class=\"row\"><h4><a href=\"livescores.php?GameID=1156\"><img src=\"images/GEE.png\"> Geelong vs <img src=\"images/MEL.png\"> Melbourne (upcoming)</a></h4></div><div class=\"row\"><h4><a href=\"livescores.php?GameID=1158\"><img src=\"images/FRE.png\"> Fremantle vs <img src=\"images/WBD.png\"> Western Bulldogs (upcoming)</a></h4></div><div class=\"row\"><h4><a href=\"livescores.php?GameID=1157\"><img src=\"images/PTA.png\"> Port Adelaide vs <img src=\"images/ADE.png\"> Adelaide (upcoming)</a></h4></div><div class=\"row\"><h4><a href=\"livescores.php?GameID=1159\"><img src=\"images/STK.png\"> St Kilda vs <img src=\"images/BRL.png\"> Brisbane (upcoming)</a></h4></div><div class=\"row\"><h4><a href=\"livescores.php?GameID=1160\"><img src=\"images/CAR.png\"> Carlton vs <img src=\"images/ESS.png\"> Essendon (upcoming)</a></h4></div><div class=\"row\"><h4><a href=\"livescores.php?GameID=1161\"><img src=\"images/GCS.png\"> Gold Coast vs <img src=\"images/HAW.png\"> Hawthorn (upcoming)</a></h4></div><div class=\"row\"><h4>Round 2</h4></div><div class=\"row\"><h4><a href=\"livescores.php?GameID=1144\"><img src=\"images/RIC.png\"> Richmond vs <img src=\"images/COL.png\"> Collingwood <small>(completed)</small></a></h4></div><div class=\"row\"><h4><a href=\"livescores.php?GameID=1145\"><img src=\"images/WBD.png\"> Western Bulldogs vs <img src=\"images/SYD.png\"> Sydney <small>(completed)</small></a></h4></div><div class=\"row\"><h4><a href=\"livescores.php?GameID=1146\"><img src=\"images/HAW.png\"> Hawthorn vs <img src=\"images/ADE.png\"> Adelaide <small>(completed)</small></a></h4></div><div class=\"row\"><h4><a href=\"livescores.php?GameID=1147\"><img src=\"images/GWS.png\"> GWS Giants vs <img src=\"images/GCS.png\"> Gold Coast <small>(completed)</small></a></h4></div><div class=\"row\"><h4><a href=\"livescores.php?GameID=1148\"><img src=\"images/BRL.png\"> Brisbane vs <img src=\"images/ESS.png\"> Essendon <small>(completed)</small></a></h4></div><div class=\"row\"><h4><a href=\"livescores.php?GameID=1149\"><img src=\"images/WCE.png\"> West Coast vs <img src=\"images/STK.png\"> St Kilda <small>(completed)</small></a></h4></div><div class=\"row\"><h4><a href=\"livescores.php?GameID=1150\"><img src=\"images/GEE.png\"> Geelong vs <img src=\"images/NME.png\"> North Melbourne <small>(completed)</small></a></h4></div><div class=\"row\"><h4><a href=\"livescores.php?GameID=1151\"><img src=\"images/MEL.png\"> Melbourne vs <img src=\"images/CAR.png\"> Carlton <small>(completed)</small></a></h4></div><div class=\"row\"><h4><a href=\"livescores.php?GameID=1152\"><img src=\"images/PTA.png\"> Port Adelaide vs <img src=\"images/FRE.png\"> Fremantle <small>(completed)</small></a></h4></div><div class=\"row\"><h4>Round 1</h4></div><div class=\"row\"><h4><a href=\"livescores.php?GameID=1135\"><img src=\"images/CAR.png\"> Carlton vs <img src=\"images/RIC.png\"> Richmond <small>(completed)</small></a></h4></div><div class=\"row\"><h4><a href=\"livescores.php?GameID=1136\"><img src=\"images/COL.png\"> Collingwood vs <img src=\"images/WBD.png\"> Western Bulldogs <small>(completed)</small></a></h4></div><div class=\"row\"><h4><a href=\"livescores.php?GameID=1138\"><img src=\"images/SYD.png\"> Sydney vs <img src=\"images/PTA.png\"> Port Adelaide <small>(completed)</small></a></h4></div><div class=\"row\"><h4><a href=\"livescores.php?GameID=1137\"><img src=\"images/STK.png\"> St Kilda vs <img src=\"images/MEL.png\"> Melbourne <small>(completed)</small></a></h4></div><div class=\"row\"><h4><a href=\"livescores.php?GameID=1140\"><img src=\"images/ESS.png\"> Essendon vs <img src=\"images/HAW.png\"> Hawthorn <small>(completed)</small></a></h4></div><div class=\"row\"><h4><a href=\"livescores.php?GameID=1139\"><img src=\"images/GCS.png\"> Gold Coast vs <img src=\"images/BRL.png\"> Brisbane <small>(completed)</small></a></h4></div><div class=\"row\"><h4><a href=\"livescores.php?GameID=1141\"><img src=\"images/NME.png\"> North Melbourne vs <img src=\"images/WCE.png\"> West Coast <small>(completed)</small></a></h4></div><div class=\"row\"><h4><a href=\"livescores.php?GameID=1142\"><img src=\"images/ADE.png\"> Adelaide vs <img src=\"images/GWS.png\"> GWS Giants <small>(completed)</small></a></h4></div><div class=\"row\"><h4><a href=\"livescores.php?GameID=1143\"><img src=\"images/FRE.png\"> Fremantle vs <img src=\"images/GEE.png\"> Geelong <small>(completed)</small></a></h4></div><br><br>\n"
" </body>\n"
"</html>")
matches = re.finditer(regex, test_str, re.MULTILINE)
for matchNum, match in enumerate(matches, start=1):
print ("Match {matchNum} was found at {start}-{end}: {match}".format(matchNum = matchNum, start = match.start(), end = match.end(), match = match.group()))
for groupNum in range(0, len(match.groups())):
groupNum = groupNum + 1
print ("Group {groupNum} found at {start}-{end}: {group}".format(groupNum = groupNum, start = match.start(groupNum), end = match.end(groupNum), group = match.group(groupNum)))
# Note: for Python 2.7 compatibility, use ur"" to prefix the regex and u"" to prefix the test string and substitution.
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