import re
regex = re.compile(r"^\w++\W++((?<=\")[\w-]+(?=\"))\W+((?<=\")[\w-]+(?=\"))[\S\s]+?(count\W+=.*)[\S\s]+?^}$", flags=re.MULTILINE)
test_str = ("resource \"aws_iam_role\" \"my_test_payer_specific_role\" {\n"
" count = \"${(var.payer_account == \"380834257621\")?1:0}\"\n\n"
" name = \"my_test_payer_specific_role\"\n"
" max_session_duration = \"7200\"\n"
" assume_role_policy = \"${data.aws_iam_policy_document.my_test_payer_specific_role-policy.json}\"\n"
" tags = \"${var.resources_tags}\"\n"
" lifecycle {\n"
" ignore_changes = [\n"
" \"permissions_boundary\"\n"
" ]\n"
" }\n"
"}\n\n"
"resource \"aws_iam_role_policy_attachment\" \"my_test_payer_specific_role-policy-attachment\" {\n"
" role = \"${aws_iam_role.my_test_payer_specific_role.name}\"\n"
" count = \"${(var.payer_account == \"380834257621\")?1:0}\"\n"
" policy_arn = \"arn:${var.partition}:iam::aws:policy/AdministratorAccess\"\n"
"}\n\n"
"data \"aws_iam_policy_document\" \"my_test_payer_specific_role-policy\" {\n"
" count = \"${(var.payer_account == \"380834257621\")?1:0}\"\n"
" statement {\n"
" actions = [\"sts:AssumeRole\"]\n\n"
" principals {\n"
" type = \"AWS\"\n"
" identifiers = [\"arn:${var.partition}:iam::${var.payer_account}:root\", \"arn:${var.partition}:iam::380834257621:root\"]\n"
" }\n"
" }\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