import re
regex = re.compile(r"(?i)^\s*(.*((p|post)[-.\s]*(o|off|office)[-.\s]*(b|box|bin)[-.\s]*)|.*((p|post)[-.\s]*(o|off|office)[-.\s]*)|.*((p|post)[-.\s]*(b|box|bin)[-.\s]*)|(box|bin)[-.\s]*)(#|n|num|number)?\s*\d+", flags=re.MULTILINE)
test_str = ("-- Match\n"
"post office box 1\n"
"post office bin 1\n"
"post office b 1\n"
"post off box 1\n"
"post off bin 1\n"
"post off b 1\n"
"post o box 1\n"
"post o bin 1\n"
"post o b 1\n"
"p office box 1\n"
"p office bin 1\n"
"p office b 1\n"
"p off box 1\n"
"p off bin 1\n"
"p off b 1\n"
"p o box 1\n"
"p o bin 1\n"
"p o b 1\n"
"p-o-b-1\n"
"p.o.b.1\n"
"POB1\n"
"pob1\n"
"pob#1\n"
"pob #1\n"
"pob # 1\n"
" p o b # 1 x\n"
" p o b # 1 x\n"
"pob n1\n"
"pob num1\n"
"pob number1\n"
"foo pob1\n"
"1 pob1\n"
"box 1\n"
"bin 1\n"
"box-1\n"
"box.1\n"
"box1\n"
"BOX1\n"
"box#1\n"
"box #1\n"
"box # 1\n"
" box # 1 x\n"
" box # 1 x\n"
"po 1\n"
"po n1\n"
"PO 1\n"
"pb 1\n"
"pb n1\n"
"PB 1\n\n"
"-- No Match\n"
"foo box 1\n"
"b1\n"
"#1\n"
"1 box 1\n"
"1 pob\n"
"post 1\n"
"n1\n"
"number1\n"
"num1\n"
"post office box\n"
"post office bin\n"
"post office b\n"
"post off box\n"
"post off bin\n"
"post off b\n"
"post o box\n"
"post o bin\n"
"post o b\n"
"p office box\n"
"p office bin\n"
"p office b\n"
"p off box\n"
"p off bin\n"
"p off b\n"
"p o box\n"
"p o bin\n"
"p o b\n"
"p-o-b-\n"
"p.o.b.\n"
"POB\n"
"pob\n"
"pob#\n"
"pob #\n"
"pob #\n"
" p o b # x\n"
" p o b # x\n"
"pob n\n"
"pob num\n"
"pob number\n"
"foo pob\n"
"box\n"
"bin \n"
"box-\n"
"box.\n"
"box\n"
"BOX\n"
"box#\n"
"box #\n"
"box # \n"
" box # x\n"
" box # x\n"
"po\n"
"po n\n"
"PO\n"
"pb\n"
"pb n\n"
"PB")
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