Python Regular Expression Word Boundaries

I recently had to replace an exact match of a word within a string. I needed to replace all instances of the word "North" with its abbreviation, N.

At first I wrote the following:

import re

word_boundary_regex = re.compile(r"\bNORTH\b", re.IGNORECASE)

Which will work as expected in cases such as this:

example_1 = 'The north gate stood tall'
print word_boundary_regex.sub('N', example_1)
>>> The N gate stood tall

However, in the example below, I would not have expected "north" in "north-eners" to have been matched.

example_2 = 'The north gate went down. The north-eners climbed the wall'
print word_boundary_regex.sub('N', example_2)
>>> The N gate went down. The N-eners climbed the wall

A quick solution for dealing with example_2 is to explicitly state all of the characters that are disallowed in the regular expression.

word_boundary_regex = re.compile(r"(?<![A-Z0-9\-])NORTH(?![A-Z0-9\-]", 
                                 re.IGNORECASE)
example_2 = 'The north gate went down. The north-eners climbed the wall'
print word_boundary_regex.sub('N', example_2)
>>> The n gate went down. The north-eners climbed the wall

I have kept the regular expression relevant to the two examples above. The regular expression will still match cases such as "north", "@north", etc.