Я думаю, вам следует немного повозиться с Regex.Replace
и использованием специального символа границы слова (\b
) для обозначения границ слова. Я не эксперт, хотя. Но попробуйте это.
Пример:
string input = "llo Hello Ello llo lo o llo, and oh hello llo! Look, a yellow llo.";
string output = Regex.Replace(input, @"\bllo\b", "___");
Console.WriteLine(output);
Выход:
___ Hello Ello ___ lo o ___, and oh hello ___! Look, a yellow ___.
Обратите внимание, что в начале это слово "llo", а также те, за которыми следуют знаки препинания ("llo", "llo!" И "llo."), Без ошибочного удаления тех, которые были частью других слов «Привет», «Элло», «желтый»).
Редактировать : Ниже приведен ответ на ваш комментарий. Насколько я понимаю, у вас есть два TextBox preview
и question
и ListBox chosenwordlist
. Я верю вот что вы хотите сделать:
// Start by setting preview to the same text as question.
preview.Text = question.Text;
for (int i = 0; i < chosenwordlist.Items.Count; ++i)
{
string word = chosenwordlist.Items[i].ToString();
// Notice the verbatim literal (@) for the SECOND "\b" as well.
string pattern = @"\b"+ word + @"\b";
// Since the text in your question TextBox isn't changing, you need to base each
// replacement off of what's in the preview TextBox, which IS (changing).
preview.Text = Regex.Replace(preview.Text, pattern, "__________");
}