I'm having difficulty with a Python regex. I want to fine any of N, S, E, W, NB, SB, EB, WB, including at the start or end of the string. My regex easily finds this in the middle, but fails on the start or end.
Can anyone advise what I'm doing wrong with dirPattern i below code sample?
Note: I realize I have some other problems to deal with (e.g. 'W of'), but think I know how to modify the regex for those.
Thanks in advance.
import re
nameList = ['Boulder Highway and US 95 NB', 'Boulder Hwy and US 95 SB',
'Buffalo and Summerlin N', 'Charleston and I-215 W', 'Eastern and I-215 S', 'Flamingo and NB I-15',
'S Buffalo and Summerlin', 'Flamingo and SB I-15', 'Gibson and I-215 EB', 'I-15 at 3.5 miles N of Jean',
'I-15 NB S I-215 (dual)', 'I-15 SB 4.3 mile N of Primm', 'I-15 SB S of Russell', 'I-515 SB at Eastern W',
'I-580 at I-80 N E', 'I-580 at I-80 S W', 'I-80 at E 4TH St Kietzke Ln', 'I-80 East of W McCarran',
'LV Blvd at I-215 S', 'S Buffalo and I-215 W', 'S Decatur and I-215 WB', 'Sahara and I-15 East',
'Sands and Wynn South Gate', 'Silverado Ranch and I-15 (west side)']
dirMap = {'N': 'North', 'S': 'South', 'E': 'East', 'W': 'West'}
dirPattern = re.compile(r'[ ^]([NSEW])B?[ $]')
print('name\tmatch\tdirSting\tdirection')
for name in nameList:
match = dirPattern.search(name)
direction = None
dirString = None
if match:
dirString = match.group(1)
if dirString in dirMap:
direction = dirMap[dirString]
print('%s\t%s\t%s\t%s'%(name, match, dirString, direction))
Some sample expected output:
name match dirSting direction
Boulder Highway and US 95 NB <_sre.SRE_Match object at 0x7f68af836648> N North
Boulder Hwy and US 95 SB <_sre.SRE_Match object at 0x7f68ae836648> S South
Buffalo and Summerlin N <_sre.SRE_Match object at 0x7f68af826648> N North
Charleston and I-215 W <_sre.SRE_Match object at 0x7f68cf836648> W West
Flamingo and NB I-15 <_sre.SRE_Match object at 0x7f68af8365d0> N North
S Buffalo and Summerlin <_sre.SRE_Match object at 0x7f68aff36648> S South
Gibson and I-215 EB <_sre.SRE_Match object at 0x7f68afa36648> E East
However, start or end examples give:
Boulder Highway and US 95 NB None None None
^and$inside square brackets doesn't still mean the start/end of the string, you know?direction = dirMap.get(dirString), that will return None if there is no matching key in the dict