import re
regex = re.compile(r"(Uni(t|ts)|Sho(p|ps)|Offic(e|es)|Fla(t|ts)?|Rm|Roo(m|ms)|Suit(e|es)).\w+(-|&)?\w*", flags=re.IGNORECASE)
test_str = ("Rm. 2301, Blk. B3-B4, \n"
"Flat/Room 5, 9/F, \n"
"rm A, 17/F., \n"
"Flat F, 9/F, \n"
"Flat G1, 10/F, \n"
"Flat C, 36/F, Block 1, \n"
"Flat 1107&1108, 11/F, \n"
"Flat 2301, 23/F, F\n"
"Unit 3, 2/F, L\n"
"Unit 1603 16/F \n"
"Offices D-F, 23/F, \n"
"Office D-F, 23/F, \n"
"Unit 1901, 19/F, \n"
"Units A, 6/F, \n"
"Shop 14, G/F, \n"
"Rooms 2202, \n"
"Suite 702, 7/F.,\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