import re
regex = re.compile(r",\s*(\"subresource_uris\":.[^}]*[}])", flags=re.MULTILINE | re.DOTALL)
test_str = ("{\n"
" \"first_page_uri\": \"/2010-04-01/Accounts/ACd7a7c24a3c7b0b0ddcde452fd6c18aae/Usage/Records/LastMonth.json?PageSize=1000&Page=0\",\n"
" \"end\": 387,\n"
" \"previous_page_uri\": null,\n"
" \"uri\": \"/2010-04-01/Accounts/ACd7a7c24a3c7b0b0ddcde452fd6c18aae/Usage/Records/LastMonth.json?PageSize=1000&Page=0\",\n"
" \"page_size\": 1000,\n"
" \"start\": 0,\n"
" \"usage_records\": [\n"
" {\n"
" \"category\": \"wireless-usage\",\n"
" \"description\": \"SIM Usage\",\n"
" \"account_sid\": \"ACd7a7c24a3c7b0b0ddcde452fd6c18aae\",\n"
" \"start_date\": \"2023-01-01\",\n"
" \"end_date\": \"2023-01-31\",\n"
" \"as_of\": \"2023-02-05T06:53:40+00:00\",\n"
" \"count\": \"0\",\n"
" \"count_unit\": \"units\",\n"
" \"usage\": \"0\",\n"
" \"usage_unit\": \"units\",\n"
" \"price\": \"0\",\n"
" \"price_unit\": \"usd\",\n"
" \"api_version\": \"2010-04-01\",\n"
" \"uri\": \"/2010-04-01/Accounts/ACd7a7c24a3c7b0b0ddcde452fd6c18aae/Usage/Records/LastMonth.json?Category=wireless-usage&StartDate=2023-01-01&EndDate=2023-01-31\",\n"
" \"subresource_uris\": {\n"
" \"all_time\": \"/2010-04-01/Accounts/ACd7a7c24a3c7b0b0ddcde452fd6c18aae/Usage/Records/AllTime.json?Category=wireless-usage\",\n"
" \"today\": \"/2010-04-01/Accounts/ACd7a7c24a3c7b0b0ddcde452fd6c18aae/Usage/Records/Today.json?Category=wireless-usage\",\n"
" \"yesterday\": \"/2010-04-01/Accounts/ACd7a7c24a3c7b0b0ddcde452fd6c18aae/Usage/Records/Yesterday.json?Category=wireless-usage\",\n"
" \"this_month\": \"/2010-04-01/Accounts/ACd7a7c24a3c7b0b0ddcde452fd6c18aae/Usage/Records/ThisMonth.json?Category=wireless-usage\",\n"
" \"last_month\": \"/2010-04-01/Accounts/ACd7a7c24a3c7b0b0ddcde452fd6c18aae/Usage/Records/LastMonth.json?Category=wireless-usage\",\n"
" \"daily\": \"/2010-04-01/Accounts/ACd7a7c24a3c7b0b0ddcde452fd6c18aae/Usage/Records/Daily.json?Category=wireless-usage\",\n"
" \"monthly\": \"/2010-04-01/Accounts/ACd7a7c24a3c7b0b0ddcde452fd6c18aae/Usage/Records/Monthly.json?Category=wireless-usage\",\n"
" \"yearly\": \"/2010-04-01/Accounts/ACd7a7c24a3c7b0b0ddcde452fd6c18aae/Usage/Records/Yearly.json?Category=wireless-usage\"\n"
" }\n"
" },\n"
" {\n"
" \"category\": \"pv-basic-rooms\",\n"
" \"description\": \"Go Rooms\",\n"
" \"account_sid\": \"ACd7a7c24a3c7b0b0ddcde452fd6c18aae\",\n"
" \"start_date\": \"2023-01-01\",\n"
" \"end_date\": \"2023-01-31\",\n"
" \"as_of\": \"2023-02-05T06:53:40+00:00\",\n"
" \"count\": \"0\",\n"
" \"count_unit\": \"\",\n"
" \"usage\": \"0\",\n"
" \"usage_unit\": \"\",\n"
" \"price\": \"0\",\n"
" \"price_unit\": \"usd\",\n"
" \"api_version\": \"2010-04-01\",\n"
" \"uri\": \"/2010-04-01/Accounts/ACd7a7c24a3c7b0b0ddcde452fd6c18aae/Usage/Records/LastMonth.json?Category=pv-basic-rooms&StartDate=2023-01-01&EndDate=2023-01-31\",\n"
" \"subresource_uris\": {\n"
" \"all_time\": \"/2010-04-01/Accounts/ACd7a7c24a3c7b0b0ddcde452fd6c18aae/Usage/Records/AllTime.json?Category=pv-basic-rooms\",\n"
" \"today\": \"/2010-04-01/Accounts/ACd7a7c24a3c7b0b0ddcde452fd6c18aae/Usage/Records/Today.json?Category=pv-basic-rooms\",\n"
" \"yesterday\": \"/2010-04-01/Accounts/ACd7a7c24a3c7b0b0ddcde452fd6c18aae/Usage/Records/Yesterday.json?Category=pv-basic-rooms\",\n"
" \"this_month\": \"/2010-04-01/Accounts/ACd7a7c24a3c7b0b0ddcde452fd6c18aae/Usage/Records/ThisMonth.json?Category=pv-basic-rooms\",\n"
" \"last_month\": \"/2010-04-01/Accounts/ACd7a7c24a3c7b0b0ddcde452fd6c18aae/Usage/Records/LastMonth.json?Category=pv-basic-rooms\",\n"
" \"daily\": \"/2010-04-01/Accounts/ACd7a7c24a3c7b0b0ddcde452fd6c18aae/Usage/Records/Daily.json?Category=pv-basic-rooms\",\n"
" \"monthly\": \"/2010-04-01/Accounts/ACd7a7c24a3c7b0b0ddcde452fd6c18aae/Usage/Records/Monthly.json?Category=pv-basic-rooms\",\n"
" \"yearly\": \"/2010-04-01/Accounts/ACd7a7c24a3c7b0b0ddcde452fd6c18aae/Usage/Records/Yearly.json?Category=pv-basic-rooms\"\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