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

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

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

И снова я с регулярными выражениями. Допустим, я хочу добавить ко всем словам восклицательные знаки и заменить все гласные на * (кроме A и a, которые заменяются на @). Я пытался написать что-то вроде @"(\b\w+\b)|([aeiou])" или @"(\b\w*([aeiou])\w*\b)" - ничего не получается. Через LINQ написал, но если бы через Regex получилось, то выглядело бы, конечно, проще, что-то вроде "группа 1 заменяется на $1!!!!", "группа 2 - на @", а "группа 3 - на *". Или я слишком многого хочу от регулярных выражений?
Листинг программы
  1. using System;
  2. using System.Linq;
  3. using System.Collections.Generic;
  4. public class Kata
  5. {
  6. private static Dictionary<char, char> d = new Dictionary<char, char>()
  7. {
  8. { 'A', '@' },
  9. { 'E', '*' },
  10. { 'I', '*' },
  11. { 'O', '*' },
  12. { 'U', '*' }
  13. };
  14. public static string Gordon(string a)
  15. {
  16. return String.Join(" ", a.Split().Select(word => new String(word.Select(ch =>
  17. {
  18. ch = Char.ToUpper(ch);
  19. char shout;
  20. return d.TryGetValue(ch, out shout) ? shout : ch;
  21. })
  22. .Concat(Enumerable.Repeat('!', 4)).ToArray())));
  23. }
  24. public static void Main()
  25. {
  26. Console.WriteLine(Gordon("What feck damn cake"));
  27. }
  28. }

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

textual
Листинг программы
  1.             var re = new Regex(@"(?<ea>[aA]\b)|(?<ev>[eiouEIOU]\b)|(?<eow>\w\b)|(?<voice>[eiouEIOU])|(?<aa>[aA])");
  2.             string input = "alsdfj roijsadio lafjlsakjdowfn";
  3.             string output = re.Replace(input, m =>
  4.             {
  5.                 if (m.Groups["ev"].Success) return "*!";
  6.                 if (m.Groups["ea"].Success) return "@!";
  7.                 if (m.Groups["eow"].Success) return m.Value + "!";
  8.                 if (m.Groups["voice"].Success) return "*";
  9.                 if (m.Groups["aa"].Success) return "@";
  10.                 return "";
  11.             });
  12.             Console.WriteLine(input);
  13.             Console.WriteLine(output);

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


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

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

8   голосов , оценка 3.75 из 5

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

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

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