import re
regex = re.compile(r"(?P<street_address>.*(?:Lane|Street|Boulevard|Crescent|Place|Road|Highway|Avenue|Drive|Circuit|Parade|Telopea|Nicklin Way|Terrace|Square|Court|Close|Endeavour Way|Esplanade|East|The Centreway|Mall|Quay|Gateway|Low Way|Point|Rd|Morinda|Way|Ave|St|South Steyne|Broadway|HQ|Expressway|Street|Castlereagh|Meadow Way|Track|Kulkyne Way|Narabang Way|Bank)),? (?P<subrub>[A-Za-z ]+),? (?P<state>[A-Z]+),? (?P<postcode>\d+)", flags=re.MULTILINE)
test_str = ("139 McKinnon Road, PINELANDS, NT, 829\n"
"108 East Point Road, Fannie Bay, NT, 820\n"
"3-11 Hamilton Street, Townsville City, QLD, 4810\n"
"40 17 Geranium Street, THE GARDENS, NT, 820\n"
"1, 3, 5 Demeter Street & 12 Hermes Avenue ROUSE HILL NSW 2155\n"
"Lot 9 Island Point Road, ST GEORGES BASIN, NSW, 2540\n"
"31 Stephen Street SOUTH TOOWOOMBA QLD 4350\n"
"316 Sturt Street and 511 Flinders Street, Townsville City, QLD, 4810")
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