# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility
import re
regex = r"\"ruleGroupId\":\s*\"(?<ruleGroupId>[^\"]+)\",[\r\n](.+[\r\n]){2}(\"excludedRules\"\:\s\[)([\r\n].+)[\r\n]\"exclusionType\"\:\s*\"(?<exclusionTpe>[^\"]+)"
test_str = ("{\n"
"\"timestamp\": 1646229254523,\n"
"\"formatVersion\": 1,\n"
"\"webaclId\": \"arn:aws:wafv2:us-east-1:111111:regional/webacl/alb-stage-web-acl/26ac170c-03c4-4fd7-8fab-86e346789fef\",\n"
"\"terminatingRuleId\": \"Default_Action\",\n"
"\"terminatingRuleType\": \"REGULAR\",\n"
"\"action\": \"ALLOW\",\n"
"\"terminatingRuleMatchDetails\": [],\n"
"\"httpSourceName\": \"ALB\",\n"
"\"httpSourceId\": \"182116744736-app/ALB-Stage/fcc1f5f9483b035e\",\n"
"\"ruleGroupList\": [\n"
"{\n"
"\"ruleGroupId\": \"AWS#AWSManagedRulesAmazonIpReputationList\",\n"
"\"terminatingRule\": null,\n"
"\"nonTerminatingMatchingRules\": [],\n"
"\"excludedRules\": null\n"
"},\n"
"{\n"
"\"ruleGroupId\": \"AWS#AWSManagedRulesBotControlRuleSet\",\n"
"\"terminatingRule\": null,\n"
"\"nonTerminatingMatchingRules\": [],\n"
"\"excludedRules\": null\n"
"},\n"
"{\n"
"\"ruleGroupId\": \"AWS#AWSManagedRulesCommonRuleSet\",\n"
"\"terminatingRule\": null,\n"
"\"nonTerminatingMatchingRules\": [],\n"
"\"excludedRules\": [\n"
"{\n"
"\"exclusionType\": \"EXCLUDED_AS_COUNT\",\n"
"\"ruleId\": \"SizeRestrictions_BODY\"\n"
"}\n"
"]\n"
"},\n"
"{\n"
"\"ruleGroupId\": \"AWS#AWSManagedRulesKnownBadInputsRuleSet\",\n"
"\"terminatingRule\": null,\n"
"\"nonTerminatingMatchingRules\": [],\n"
"\"excludedRules\": null\n"
"}\n"
"],\n"
"\"rateBasedRuleList\": [],\n"
"\"nonTerminatingMatchingRules\": [],\n"
"\"requestHeadersInserted\": null,\n"
"\"responseCodeSent\": null,\n"
"\"httpRequest\": {\n"
"\"clientIp\": \"67.218.14.10\",\n"
"\"country\": \"US\",\n"
"\"headers\": [\n"
"{\n"
"\"name\": \"host\",\n"
"\"value\": \"sample.com\"\n"
"},\n"
"{\n"
"\"name\": \"content-length\",\n"
"\"value\": \"50362\"\n"
"},\n"
"{\n"
"\"name\": \"cache-control\",\n"
"\"value\": \"max-age=0\"\n"
"},\n"
"{\n"
"\"name\": \"sec-ch-ua\",\n"
"\"value\": \"\\\" Not A;Brand\\\";v=\\\"99\\\", \\\"Chromium\\\";v=\\\"98\\\", \\\"Microsoft Edge\\\";v=\\\"98\\\"\"\n"
"},\n"
"{\n"
"\"name\": \"sec-ch-ua-mobile\",\n"
"\"value\": \"?0\"\n"
"},\n"
"{\n"
"\"name\": \"sec-ch-ua-platform\",\n"
"\"value\": \"\\\"Windows\\\"\"\n"
"},\n"
"{\n"
"\"name\": \"origin\",\n"
"\"value\": \"https://sample.com\"\n"
"},\n"
"{\n"
"\"name\": \"upgrade-insecure-requests\",\n"
"\"value\": \"1\"\n"
"},\n"
"{\n"
"\"name\": \"dnt\",\n"
"\"value\": \"1\"\n"
"},\n"
"{\n"
"\"name\": \"content-type\",\n"
"\"value\": \"multipart/form-data; boundary=----WebKitFormBoundaryuXOFvh7iQjJkEJHm\"\n"
"},\n"
"{\n"
"\"name\": \"user-agent\",\n"
"\"value\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36 Edg/98.0.1108.62\"\n"
"},\n"
"{\n"
"\"name\": \"accept\",\n"
"\"value\": \"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9\"\n"
"},\n"
"{\n"
"\"name\": \"sec-fetch-site\",\n"
"\"value\": \"same-origin\"\n"
"},\n"
"{\n"
"\"name\": \"sec-fetch-mode\",\n"
"\"value\": \"navigate\"\n"
"},\n"
"{\n"
"\"name\": \"sec-fetch-user\",\n"
"\"value\": \"?1\"\n"
"},\n"
"{\n"
"\"name\": \"sec-fetch-dest\",\n"
"\"value\": \"document\"\n"
"},\n"
"{\n"
"\"name\": \"referer\",\n"
"\"value\": \"https://sample.com/DischargeDetail.aspx\"\n"
"},\n"
"{\n"
"\"name\": \"accept-encoding\",\n"
"\"value\": \"gzip, deflate, br\"\n"
"},\n"
"{\n"
"\"name\": \"accept-language\",\n"
"\"value\": \"en-US,en;q=0.9\"\n"
"},\n"
"{\n"
"\"name\": \"cookie\",\n"
"\"value\": \"_ga=GA1.3.84334902.1642521795; __RequestVerificationToken=-8kinKddCjKCZTws-wPmXDZTFg39urggswPnYm5Y15UwfIjspHqTj1hOPAXIaRPHL2cupyt2vO4Gb5QUExZGd6e5djS0v81kxt2pH22Ow9XiJYr2NPWB_BdQb-VmCUHVXbiVZZ5NwTfGDrXd2O0uD_gba4fM3PhkQUO5f9zs5381; _gid=GA1.2.249665053.1645964709; _ga_33R15ZN4N1=GS1.1.1645965393.6.0.1645965397.56; _ga=GA1.2.84334902.1642521795; ASP.NET_SessionId=1fnikipv2poi14r3doy4kb2w\"\n"
"}\n"
"],\n"
"\"uri\": \"/ReleaseRequest.aspx\",\n"
"\"args\": \"\",\n"
"\"httpVersion\": \"HTTP/2.0\",\n"
"\"httpMethod\": \"POST\",\n"
"\"requestId\": \"1-621f7706-5e8f4ea33e2dc0cc66b98797\"\n"
"}\n"
"}")
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