Это из-за \W
в последней части. \W
не A-Z0-9_
char.
В "они сказали привет" есть место после привет, но "привет" там ничего нет, вот почему.
Если вы измените его на (?<end>\W*.*?)
, это может сработать.
На самом деле само по себе регулярное выражение не имеет смысла, скорее, оно должно выглядеть так:
"\b" + Regex.Escape(value) + "\b"
\b
является границей слова