Причиной конкретного поведения является следующая строка.
a=a.Replace(words[i],"{"+words[i]+"}");
String.Replace заменит все вхождения конкретной строки. Поэтому, когда вы попытаетесь заменить is
, вы в конечном итоге замените подстроку is
в this
.
Вы можете сделать следующее для получения правильного результата.
var originalString ="Hello everyone is this my string.";
var words= Regex.Replace(originalString,@"\b[^ ]+\b",@"{$0}");
Это гарантирует, что символ точки будет обработан так же, как в желаемом ответе в OP.
Образцы
Hello everyone is this my string.
{Hello} {everyone} {is} {this} {my} {string}.
Hello everyone, is this my string.
{Hello} {everyone}, {is} {this} {my} {string}.