import re
regex = re.compile(r"<div\sid=\"[\s\S]*?dp_productDescription_container_div[\s\S]*?<div\sid=\"productDescription_feature_div[\s\S]*?<div[\s\S]*?<div[\s\S]*?<div\sid=\"productDescription[\s\S]*?>([\s\S]*?<p>[\s\S]*?<\/p>\s*)<\/div>", flags=re.MULTILINE)
test_str = ("<div id=\"dp_productDescription_container_div\" class=\"feature\" data-feature-name=\"productDescription\" data-cel-widget=\"dp_productDescription_container_div\">\n"
" \n"
" \n\n\n\n\n"
" \n\n"
" \n"
" \n"
" \n"
" \n"
" \n"
" \n"
" \n"
" \n"
" \n\n\n\n"
" \n"
" <div id=\"productDescription_feature_div\" data-feature-name=\"productDescription\" data-template-name=\"productDescription\" class=\"a-row feature\" data-cel-widget=\"productDescription_feature_div\">\n"
" \n"
" \n"
" \n"
" <div class=\"a-divider a-divider-section\"><div class=\"a-divider-inner\"></div></div>\n"
" \n"
" \n"
" <h2 class=\"softlines\">\n"
" Product description\n"
" \n"
" </h2>\n"
" \n"
" \n"
" \n\n"
" \n"
" \n"
" \n"
" \n"
" \n\n\n\n\n\n"
" <div id=\"productDescription\" class=\"a-section a-spacing-small\">\n"
" \n\n\n\n\n\n"
" \n"
" \n"
" \n\n\n"
" \n"
" \n"
" \n"
" \n"
" \n\n"
" \n"
" \n"
" \n"
" \n"
" \n"
" <!-- show up to 2 reviews by default --> \n"
" \n"
" \n"
" \n"
" \n"
" <p>Train better. Look great. The Vazee agility trainer supports your interval workouts with an exciting blend of fashionable colors and a newly designed performance lace mesh upper for support and breathability.\n"
" \n"
" </p>\n"
" \n"
" \n"
" <p>Train better. Look great. The Vazee agility trainer supports your interval workouts with an exciting blend of fashionable colors and a newly designed performance lace mesh upper for support and breathability.\n"
" \n"
" </p> \n"
" \n"
" \n"
" \n"
" \n"
" \n"
" \n"
" \n"
" </div>\n\n"
" \n"
" <style type=\"text/css\">\n"
"#productDescription {\n"
" color: #333333;\n"
" word-wrap: break-word;\n"
" font-size: small;\n"
" line-height: initial;\n"
" margin: 0.5em 0px 0em 25px;\n"
"}\n\n"
"#productDescription_feature_div > h2.default {\n"
" color: #CC6600;\n"
" font-size: medium;\n"
" margin: 0 0 0.25em;\n"
"}\n\n"
"#productDescription_feature_div > h2.books {\n"
" color:#333 !important;\n"
" font-size:21px !important;\n"
" line-height: 1.3;\n"
" padding-bottom: 4px;\n"
" font-weight: normal;\n"
" margin: 0px;\n"
"}\n\n"
"#productDescription_feature_div > h2.softlines {\n"
" color:#333 !important; \n"
" font-size:21px !important;\n"
" line-height: 1.3;\n"
" padding-bottom: 4px;\n"
" font-weight: bold;\n"
" margin: 0px;\n"
"}\n"
"#productDescription > p, #productDescription > div, #productDescription > table {\n"
" margin: 0 0 1em 0;\n"
"}\n\n"
"#productDescription p {\n"
" margin: 0em 0 1em 1em;\n"
"}\n\n"
"#productDescription h3 {\n"
" font-weight: normal;\n"
" color: #333333;\n"
" font-size: 1.23em;\n"
" clear: left;\n"
" margin: 0.75em 0px 0.375em -15px;\n"
"}\n\n"
"#productDescription table {\n"
" border-collapse: inherit !important;\n"
" margin-bottom: 0;\n"
"}\n\n"
"#productDescription table img {\n"
" max-width: inherit !important;\n"
"}\n\n"
"#productDescription table td {\n"
" font-size: small;\n"
" vertical-align: inherit !important;\n"
"}\n\n"
"#productDescription ul li {\n"
" margin: 0 0 0 20px;\n"
"}\n\n"
"#productDescription ul li ul {\n"
" list-style-type: disc !important;\n"
" margin-left: 20px !important;\n"
"}\n\n"
"#productDescription ul ul li {\n"
" list-style-type: disc !important;\n"
" margin-left: 20px !important;\n"
"}\n\n"
"#productDescription > ul ul li {\n"
" list-style-type: disc !important;\n"
"} \n\n\n"
"#productDescription ul li ul li {\n"
" margin: 0 0 0 20px;\n"
"}\n\n"
"#productDescription .aplus p {\n"
" margin: 0 0 1em 0;\n"
"}\n\n"
"#productDescription small {\n"
" font-size: smaller;\n"
"}\n\n"
"#productDescription.prodDescWidth {\n"
" max-width: 1000px\n"
"}\n\n"
"</style>\n\n"
"<!-- Used to set table width because AUI is overriding the width attribute of the tables coming in description -->\n"
"<script type=\"text/javascript\">\n"
"P.when('jQuery').execute(function($){\n"
" $(\"#productDescription table\").each(function() {\n"
" var width = $(this).attr('width');\n"
" if (width) width += 'px';\n"
" else width = 'auto';\n"
" $(this).css('width', width);\n\n"
" var padding = $(this).attr('cellpadding');\n"
" if (padding) padding += 'px';\n"
" else padding = '0px';\n"
" $(this).css('padding', padding);\n"
" });\n"
"});\n"
"</script>\n\n"
" \n\n\n\n"
" \n"
" \n"
" \n"
" \n"
" </div>\n\n\n"
" \n"
" \n"
" \n"
" \n"
" \n"
" \n"
" \n"
" \n"
" \n"
" \n"
" \n"
" \n"
" \n\n"
" \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
" </div>")
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