re.compile(r'([^a-zA-Z0-9])(%s)([^a-zA-Z0-9])' % '\+test', re.I)
Знак "+" Квантификатор "повторить хотя бы один раз" в регулярных выражениях. Он должен следовать за чем-то повторяемым, или он должен быть экранирован, если вы хотите сопоставить буквальный «+».
Лучше это, если вы хотите создавать свое регулярное выражение динамически.
re.compile(r'([^a-zA-Z0-9])(%s)([^a-zA-Z0-9])' % re.escape('+test'), re.I)
Избегайте плюса:
r'\+test'
Плюс имеет особое значение в регулярных выражениях (означающее «совпадение с предыдущим один или несколько раз»). Поскольку в вашем регулярном выражении он появляется после открытого парена, нет «предыдущего» для повторного сопоставления.