Как заменить слово в строке на пробел в C #? - PullRequest
0 голосов
/ 11 февраля 2011

Любой алгоритм, который меняет слово из строки на пробел?У меня проблемы с этим.

мой сценарий заменяет слово на пустое, но некоторые слова также встречаются внутри другого слова, поэтому в этом случае также происходит замена определенной строки в этом слове.

Ex.Здравствуйте, Ello llo lo o

, если я заменю llo на _

вывод: He_ __E __ _ ___ lo o

Ответы [ 3 ]

3 голосов
/ 11 февраля 2011

Я думаю, вам следует немного повозиться с 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, "__________");
}
1 голос
/ 11 февраля 2011

Вы можете использовать регулярные выражения http://www.regular -expressions.info / dotnet.html

0 голосов
/ 11 февраля 2011

Надеюсь, я вас правильно понял. Используя Regex, вы можете достичь этого:

Regex myRegex = new Regex(@"(?<![a-z])[a-z](?![a-z])", RegexOptions.Compiled | RegexOptions.IgnoreCase);
Debug.WriteLine(myRegex.Replace("test-a-b-c-test", "!"));

Напечатает: test-!-!-!-test
Из исходной строки: test-a-b-c-test

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...