Регулярные выражения - сохранение регистров заменяемых символов - C#

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

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

Здравствуйте! Подскажите пожалуйста, возможно ли через Regex заменить символы с сохранением регистра оригинальных символов? Допустим, у нас есть некоторый текст, в котором присутствует ошибка и программе нужно её исправить. Для примера, пользователь написал "жызнь", а программа должна исправить это слово и вывести этот же текст. Т.е. вместо "жызнь" вывести "жизнь". Однако, пользователь может написать слово и всё в верхнем регистре(т.е. "ЖЫЗНЬ", а так же, написать в верхнем регистре только некоторые символы, т.е. "жЫзНь"). Ну и программа должна заменять ошибку в слове "ЖЫЗНЬ" на "ЖИЗНЬ". Однако, писать для каждого варианта написания отдельный System.Text.RegularExpressions.Regex довольно... "геморно". Есть ли способ попроще? Пока что, у меня выходит нечто подобное(но, как я уже написал-это несколько "неудобно", отдельно каждым Regex'ом сравнивать различные варианты регистров и т.д. и т.п.):
Листинг программы
  1. Console.WriteLine("Введите строку, содержащую ошибку "ЖЫ", "ШЫ":");
  2. String _string = Console.ReadLine();
  3. System.Text.RegularExpressions.Regex _mainRegex = new System.Text.RegularExpressions.Regex(@"ЖЫ|ШЫ", System.Text.RegularExpressions.RegexOptions.IgnoreCase);//В данном случае-выполняем поиск по шаблону вне зависимости от регистра
  4. if (_mainRegex.IsMatch(_string))
  5. {
  6. Console.WriteLine("Эм... в тексте есть ошибка...");
  7. {
  8. //А вот тут начинается...
  9. System.Text.RegularExpressions.Regex _ЖЫ_Regex = new System.Text.RegularExpressions.Regex(@"ЖЫ");
  10. System.Text.RegularExpressions.Regex _жы_Regex = new System.Text.RegularExpressions.Regex(@"жы");
  11. System.Text.RegularExpressions.Regex _Жы_Regex = new System.Text.RegularExpressions.Regex(@"Жы");
  12. System.Text.RegularExpressions.Regex _жЫ_Regex = new System.Text.RegularExpressions.Regex(@"жЫ");
  13. //4 Regex'а только для "жи"...
  14. System.Text.RegularExpressions.Regex _ШЫ_Regex = new System.Text.RegularExpressions.Regex(@"ШЫ");
  15. System.Text.RegularExpressions.Regex _шы_Regex = new System.Text.RegularExpressions.Regex(@"шы");
  16. System.Text.RegularExpressions.Regex _Шы_Regex = new System.Text.RegularExpressions.Regex(@"Шы");
  17. System.Text.RegularExpressions.Regex _шЫ_Regex = new System.Text.RegularExpressions.Regex(@"шЫ");
  18. if (_ЖЫ_Regex.IsMatch(_string)) Console.WriteLine(_ЖЫ_Regex.Replace(_string, "ЖИ"));
  19. else if (_жы_Regex.IsMatch(_string)) Console.WriteLine(_жы_Regex.Replace(_string, "жи"));
  20. else if (_Жы_Regex.IsMatch(_string)) Console.WriteLine(_жы_Regex.Replace(_string, "Жи"));
  21. else if (_жЫ_Regex.IsMatch(_string)) Console.WriteLine(_жы_Regex.Replace(_string, "жИ"));
  22. else if (_ШЫ_Regex.IsMatch(_string)) Console.WriteLine(_ШЫ_Regex.Replace(_string, "ШИ"));
  23. else if (_шы_Regex.IsMatch(_string)) Console.WriteLine(_шы_Regex.Replace(_string, "ши"));
  24. else if (_Шы_Regex.IsMatch(_string)) Console.WriteLine(_шы_Regex.Replace(_string, "Ши"));
  25. else if (_шЫ_Regex.IsMatch(_string)) Console.WriteLine(_шы_Regex.Replace(_string, "шИ"));
  26. }
  27. }
  28. else Console.WriteLine("Вы ввели не верную строку для обработки...");
  29. Console.ReadKey();

Решение задачи: «Регулярные выражения - сохранение регистров заменяемых символов»

textual
Листинг программы
  1. string failString = "жФзнь";
  2. string mistakenLetter = "и";
  3. string trueStr = Regex.Replace(failString, "(ж)([^" + mistakenLetter + "])(знь)", m =>
  4. {
  5.     return m.Groups[1].Value + (Char.IsUpper(m.Value, m.Groups[2].Index) ? mistakenLetter.ToUpper() : mistakenLetter.ToLower()) + m.Groups[3].Value;
  6. }, RegexOptions.IgnoreCase);

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


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

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

15   голосов , оценка 4.067 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы