(?<![^a-zA-Z0-9]) is a double negative. You're saying it should NOT match if the character before the main expression is NOT in [a-zA-Z0-9], that is, it can only match if the that character is in [a-zA-Z0-9]. Just remove the ^: (?<![a-ZA-Z0-9]).
You're use of the string boundaries ^ and $ are confusing here, but you shouldn't need them if you're using negative look-behind and negative look-ahead.
So, switch to (?<![a-zA-Z0-9])(word|WORD)(?![a-zA-Z0-9]).
That said, @user3783243's comment about \b is a better option. \b is a 'word boundary', which represents exactly what you are trying to capture. Python does support it: official docs. Related: Regular expression optional match start/end of line
So you should actually just use \b(word|WORD)\b.