Replace заменяет не все слова в StringBuilder - C#

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток! Имеется код, по сути написанный правильно. Правильно-в смысле того, что по идее он должен работать, но он работает только частично.
using System;
using System.Text;
using System.Text.RegularExpressions;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] top_words = new[] {"в","и","Windows"};
            StringBuilder text_from_file = new StringBuilder("В Windows XP существуют специальные папки с именами \"Мои документы\", \"Мои рисунки\" и \"Моя музыка\". В Windows Vista имена этих папок не содержат слова \"Мои\" — они называются просто \"Документы\", \"Рисунки\" и \"Музыка\". Однако код, о котором идет речь в этом занятии, будет выполняться и в Windows XP, и в Windows Vista. Файлов файла");
            for (int wrd = 0; wrd < top_words.Length; wrd++)
            {
                string reg = "(\\b)(" + top_words[wrd] + ")(\\b)";
                Regex r = new Regex(reg, RegexOptions.IgnoreCase);
                MatchCollection matches = r.Matches(text_from_file.ToString());
                foreach (Match mch in matches)
                {
                    text_from_file = text_from_file.Replace(mch.Value, "Замененоооооооо", mch.Index, mch.Value.Length);
                }
            }
            Console.WriteLine(text_from_file);
            Console.ReadKey();
        }
    }
}
Это кусок кода от более крупной лабораторной. В переменной text_from_file пример текста, в массиве top_words 3 "самых употребляемых" слова. С помощью регулярного выражения эти слова по очереди ищутся в тексте. Ищутся хорошо,правильно и находятся все, которые должны находиться. Но Replace заменяет не все слова, в чём можно убедиться, выполнив программу и посмотрев результат.
Исходный текст В Windows XP существуют специальные папки с именами "Мои документы", "Мои рисунки" и "Моя музыка". В Windows Vista имена этих папок не содержат слова "Мои" — они называются просто "Документы", "Рисунки" и "Музыка". Однако код, о котором идет речь в этом занятии, будет выполняться и в Windows XP, и в Windows Vista. Файлов файла Результат Замененоооооооо Замененоооооооо XP существуют специальные папки с именами "Мои документы", "Мои рисунки" Замененоооооооо "Моя музыка". В Windows Vista имена этих папок не содержат слова "Мои" — они называются просто "Документы", "Рисунки" и "Музыка". Однако код, о котором идет речь в этом занятии, будет Замененооооооооыполняться и в Windows XP, и в Windows Vista. Файлов файла
В чём проблема, или мой недочёт? Заранее спасибо.

Решение задачи: «Replace заменяет не все слова в StringBuilder»

textual
Листинг программы
string str = "В Windows XP существуют специальные папки с именами \"Мои документы\", \"Мои рисунки\" и \"Моя музыка\". В Windows Vista имена этих папок не содержат слова \"Мои\" — они называются просто \"Документы\", \"Рисунки\" и \"Музыка\". Однако код, о котором идет речь в этом занятии, будет выполняться и в Windows XP, и в Windows Vista. Файлов файла";
StringBuilder text_from_file = new StringBuilder(Regex.Replace(str, @"\b(в|и|Windows)\b", "Замененоооооооо", RegexOptions.IgnoreCase));

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.556 из 5
Похожие ответы