Replace заменяет не все слова в StringBuilder - C#
Формулировка задачи:
Доброго времени суток!
Имеется код, по сути написанный правильно. Правильно-в смысле того, что по идее он должен работать, но он работает только частично.
Это кусок кода от более крупной лабораторной. В переменной text_from_file пример текста, в массиве top_words 3 "самых употребляемых" слова. С помощью регулярного выражения эти слова по очереди ищутся в тексте. Ищутся хорошо,правильно и находятся все, которые должны находиться. Но Replace заменяет не все слова, в чём можно убедиться, выполнив программу и посмотрев результат.
В чём проблема, или мой недочёт?
Заранее спасибо.
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(); } } }
Исходный текст
В 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));
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д