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

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

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

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

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

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

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


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

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

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