import re
regex = re.compile(r"header[\s\S]*?\"air_temp\": (\d{1,3}\.\d{0,3})")
test_str = ("{\n"
" \"observations\": {\n"
" \"notice\": [\n"
" {\n"
" \"copyright\": \"Copyright Commonwealth of Australia 2017, Bureau of Meteorology. For more information see: http://www.bom.gov.au/other/copyright.shtml http://www.bom.gov.au/other/disclaimer.shtml\",\n"
" \"copyright_url\": \"http://www.bom.gov.au/other/copyright.shtml\",\n"
" \"disclaimer_url\": \"http://www.bom.gov.au/other/disclaimer.shtml\",\n"
" \"feedback_url\": \"http://www.bom.gov.au/other/feedback\"\n"
" }\n"
" ],\n"
" \"header\": [\n"
" {\n"
" \"refresh_message\": \"Issued at 12:11 pm EST Tuesday 11 July 2017\",\n"
" \"ID\": \"IDN60901\",\n"
" \"main_ID\": \"IDN60902\",\n"
" \"name\": \"Canberra\",\n"
" \"state_time_zone\": \"NSW\",\n"
" \"time_zone\": \"EST\",\n"
" \"product_name\": \"Capital City Observations\",\n"
" \"state\": \"Aust Capital Territory\"\n"
" }\n"
" ],\n"
" \"data\": [\n"
" {\n"
" \"sort_order\": 0,\n"
" \"wmo\": 94926,\n"
" \"name\": \"Canberra\",\n"
" \"history_product\": \"IDN60903\",\n"
" \"local_date_time\": \"11/12:00pm\",\n"
" \"local_date_time_full\": \"20170711120000\",\n"
" \"aifstime_utc\": \"20170711020000\",\n"
" \"lat\": -35.3,\n"
" \"lon\": 149.2,\n"
" \"apparent_t\": 5.7,\n"
" \"cloud\": \"Mostly clear\",\n"
" \"cloud_base_m\": 1050,\n"
" \"cloud_oktas\": 1,\n"
" \"cloud_type_id\": 8,\n"
" \"cloud_type\": \"Cumulus\",\n"
" \"delta_t\": 3.6,\n"
" \"gust_kmh\": 11,\n"
" \"gust_kt\": 6,\n"
" \"air_temp\": 9.0,\n"
" \"dewpt\": 0.2,\n"
" \"press\": 1032.7,\n"
" \"press_qnh\": 1031.3,\n"
" \"press_msl\": 1032.7,\n"
" \"press_tend\": \"-\",\n"
" \"rain_trace\": \"0.0\",\n"
" \"rel_hum\": 54,\n"
" \"sea_state\": \"-\",\n"
" \"swell_dir_worded\": \"-\",\n"
" \"swell_height\": null,\n"
" \"swell_period\": null,\n"
" \"vis_km\": \"10\",\n"
" \"weather\": \"-\",\n"
" \"wind_dir\": \"WNW\",\n"
" \"wind_spd_kmh\": 7,\n"
" \"wind_spd_kt\": 4\n"
" },\n"
" {\n"
" \"sort_order\": 1,\n"
" \"wmo\": 94926,\n"
" \"name\": \"Canberra\",\n"
" \"history_product\": \"IDN60903\",\n"
" \"local_date_time\": \"11/11:30am\",\n"
" \"local_date_time_full\": \"20170711113000\",\n"
" \"aifstime_utc\": \"20170711013000\",\n"
" \"lat\": -35.3,\n"
" \"lon\": 149.2,\n"
" \"apparent_t\": 4.6,\n"
" \"cloud\": \"Mostly clear\",\n"
" \"cloud_base_m\": 900,\n"
" \"cloud_oktas\": 1,\n"
" \"cloud_type_id\": 8,\n"
" \"cloud_type\": \"Cumulus\",\n"
" \"delta_t\": 2.9,\n"
" \"gust_kmh\": 9,\n"
" \"gust_kt\": 5,\n"
" \"air_temp\": 7.3,\n"
" \"dewpt\": 0.1,\n"
" \"press\": 1033.1,\n"
" \"press_qnh\": 1031.7,\n"
" \"press_msl\": 1033.1,\n"
" \"press_tend\": \"-\",\n"
" \"rain_trace\": \"0.0\",\n"
" \"rel_hum\": 60,\n"
" \"sea_state\": \"-\",\n"
" \"swell_dir_worded\": \"-\",\n"
" \"swell_height\": null,\n"
" \"swell_period\": null,\n"
" \"vis_km\": \"10\",\n"
" \"weather\": \"-\",\n"
" \"wind_dir\": \"NW\",\n"
" \"wind_spd_kmh\": 4,\n"
" \"wind_spd_kt\": 2\n"
" }\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