I have 3 different patterns of address:
Avenue T, 55 - Sumiton, AL - USA
Avenue T - Sumiton, AL - USA
Sumiton, AL - USA
which means: [address][,][number][-][county][,][state][-][country]
I'm trying to use this regex but not working correctly:
(?<street>.*\,)(?:\s*(?<number>[1-9][0-9]*))?\s*(?<county>.*\,)?\s*(?<State>.*\-)?\s*(?<Country>.*)
Regex tester
any help please? ty
Your three patterns can be described like
${street}, ${number} - ${county}, ${State} - ${Country}
OPTIONAL OPTIONAL OBLIGATORY OBLIGATORY OBLIGATORY
You may use
^(?!$)(?<street>.*?(?=(?:,\s*\d+)?\s*-\s*\w+,))?(?:,\s*(?<number>[1-9][0-9]*))?\s*(?:-\s*)?(?<county>[\w\s]+),\s*(?<State>[A-Z]{2})\s*-\s*(?<Country>.*)$
If you need to extract them from the a multiline string use
(?m)^(?!\r?$)(?<street>.*?(?=(?:,\s*\d+)?\s*-\s*\w+,))?(?:,\s*(?<number>[1-9][0-9]*))?\s*(?:-\s*)?(?<county>[\w\s]+),\s*(?<State>[A-Z]{2})\s*-\s*(?<Country>.*)\r?$
See the regex demo. Results:
So, the street group is only populated if there is an optional number group with an obligtory county group following.
Details
^
- start of string/line (if (?m)
is used)(?!$)
/ (?!\r?$)
- a negative lookahead preventing an empty string / line match(?<street>.*?(?=(?:,\s*\d+)?\s*-\s*\w+,))?
- Group "street": any 0+ chars as few as possible up to an optional sequence of ,
, 0+ whitespaces, 1+ digits and then a -
enclosed with 0+ whitespaces, 1+ word chars and a ,
(?:,\s*(?<number>[1-9][0-9]*))?
- an optional non-capturing group matching ,
, 0+ whitespaces and then captures into Group "number" a digit from 1
to 9
and then any 0+ digits\s*(?:-\s*)?(?<county>[\w\s]+)
- 0+ whitespaces, an optional sequence of a hyphen and then 0+ whitespaces, then captures into Group "county" any 1+ word and whitespace chars,\s*(?<State>[A-Z]{2})
- a comma, 0+ whitespaces and then captures into Group "State" 2 uppercase letters\s*-\s*
- a hyphen enclosed with 0+ whitespaces(?<Country>.*)
- Group "country": any 0+ chars other than LF as many as possible$
- start of string/line.If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With