Search code examples
regexstringregex-lookaroundsregex-greedy

Regex: Match only street name within address


I have a list of addresses and I would like to have a regular expression that is able to capture just the name of the street without the street type, address number, or cardinal direction. There are some errors in formatting but all characters are in capital letters. So,

2038 W MAIN AVE
2038QWEW S JEFFERSON AVENUE
33 NORTH CALIFORNIA STREET
53371 SOUTH WASHINGTON
53371 S WASHINGTON AVENUE
1600 E PENNSYLVANIA AVE
WEST9 67ST ST
E171 N 23RD STREET
G171 N121ST STREET

ought to return

MAIN
JEFFERSON
CALIFORNIA
WASHINGTON
WASHINGTON
PENNSYLVANIA
67ST
23RD
121ST

So far I've got

([^ W ]|[^ E ]|[^ S ]|[^ N ])([0-9])*([A-Z]+)[^ ]

But I can't seem to only capture the first match that occurs after the street number. I feel like I need the standard greedy operators (i.e. ?, *, or +) but I can't figure out how to incorporate them.

These two links have taken me close:

Matching on every second occurence

Simple regex for street address


Solution

  • I was able to figure this out in a slightly different way

    [0-9A-Z]* [0-9A-Z]*$
    

    and then I simply split the string it created by the space. Maybe one or two steps too many but it's transparent