import re
regex = re.compile(r"""
^(?=[A-Z]{1,4}\b)
# Notice the matches below that don't fully match if these are NOT in reverse order:
(ACCS|ALLY|ALWY|AMBL|APP|ARC|ARTL|ARTY|AV|BA|BEND|BWLK|BVD|BR|BRAE|BRK|BROW|BYPA|BYWY|CSWY|CTR|CH|CIR|CCT|CRCS|CL|CON|CPS|CNR|CT|CTYD|COVE|CR|CRST|CRSS|CSAC|CUTT|DALE|DIP|DR|DVWY|EDGE|ELB|END|ENT|ESP|EXP|FAWY|FOLW|FTWY|FORM|FWY|FRTG|GAP|GDNS|GTE|GLDE|GLEN|GRA|GRN|GR|HTS|HIRD|HWY|HILL|INTG|JNC|KEY|LANE|LNWY|LINE|LINK|LKT|LOOP|MALL|MNDR|MEWS|MTWY|NOOK|OTLK|PDE|PWY|PASS|PSGE|PATH|PWAY|PIAZ|PLZA|PKT|PNT|PORT|PROM|QDRT|QYS|RMBL|REST|RTT|RDGE|RISE|RD|RTY|RTE|ROW|RUE|SVWY|SHUN|SPUR|SQ|ST|SBWY|TARN|TCE|THFR|TLWY|TOP|TOR|TRK|TRL|TURN|UPAS|VALE|VIAD|VIEW|VSTA|WALK|WKWY|WHRF|WYND)
""", flags=re.MULTILINE | re.VERBOSE)
test_str = ("Value\n"
"Val\n"
"ABCDE\n\n"
"ACCS\n"
"ALLY\n"
"ALWY\n"
"AMBL\n"
"APP\n"
"ARC\n"
"ARTL\n"
"ARTY\n"
"AV\n"
"BA\n"
"BEND\n"
"BWLK\n"
"BVD\n"
"BR\n"
"BRAE\n"
"BRK\n"
"BROW\n"
"BYPA\n"
"BYWY\n"
"CSWY\n"
"CTR\n"
"CH\n"
"CIR\n"
"CCT\n"
"CRCS\n"
"CL\n"
"CON\n"
"CPS\n"
"CNR\n"
"CT\n"
"CTYD\n"
"COVE\n"
"CR\n"
"CRST\n"
"CRSS\n"
"CSAC\n"
"CUTT\n"
"DALE\n"
"DIP\n"
"DR\n"
"DVWY\n"
"EDGE\n"
"ELB\n"
"END\n"
"ENT\n"
"ESP\n"
"EXP\n"
"FAWY\n"
"FOLW\n"
"FTWY\n"
"FORM\n"
"FWY\n"
"FRTG\n"
"GAP\n"
"GDNS\n"
"GTE\n"
"GLDE\n"
"GLEN\n"
"GRA\n"
"GRN\n"
"GR\n"
"HTS\n"
"HIRD\n"
"HWY\n"
"HILL\n"
"INTG\n"
"JNC\n"
"KEY\n"
"LANE\n"
"LNWY\n"
"LINE\n"
"LINK\n"
"LKT\n"
"LOOP\n"
"MALL\n"
"MNDR\n"
"MEWS\n"
"MTWY\n"
"NOOK\n"
"OTLK\n"
"PDE\n"
"PWY\n"
"PASS\n"
"PSGE\n"
"PATH\n"
"PWAY\n"
"PIAZ\n"
"PLZA\n"
"PKT\n"
"PNT\n"
"PORT\n"
"PROM\n"
"QDRT\n"
"QYS\n"
"RMBL\n"
"REST\n"
"RTT\n"
"RDGE\n"
"RISE\n"
"RD\n"
"RTY\n"
"RTE\n"
"ROW\n"
"RUE\n"
"SVWY\n"
"SHUN\n"
"SPUR\n"
"SQ\n"
"ST\n"
"SBWY\n"
"TARN\n"
"TCE\n"
"THFR\n"
"TLWY\n"
"TOP\n"
"TOR\n"
"TRK\n"
"TRL\n"
"TURN\n"
"UPAS\n"
"VALE\n"
"VIAD\n"
"VIEW\n"
"VSTA\n"
"WALK\n"
"WKWY\n"
"WHRF\n"
"WYND\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