Как найти в тексте слова с нечетным количеством букв и удалить из них среднюю букву?

218
21 мая 2018, 15:50

Нужно на C# с помощью регулярных выражений в введенном тексте найти слова с нечетным количеством букв, а потом удалить из них среднюю букву.

Answer 1

Возможно, это будет проще и понятнее:

string input = "aaa bbbb ccccc dddddd";
string pattern = @"\w+";
string RemoveCentralSymbol(string s) => s.Remove(s.Length / 2, s.Length % 2);
var result = Regex.Replace(input, pattern, match => RemoveCentralSymbol(match.Value));
Console.WriteLine(result);

Используем перегрузку Regex.Replace, принимающую MatchEvaluator (делегат, который составит строку для замены)

Answer 2

Удалить среднюю букву из слова с нечётной длиной:

https://ideone.com/k1VQZW

using System;
using System.Text.RegularExpressions;
public class Test
{
  public static void Main()
  {
    var text = "123456789";
    var res = Regex.Replace(text, @"^((?<ch>.)*).((?<-ch>.)*(?(ch)(?!))$)", @"$1$2");
    Console.WriteLine(text);
    Console.WriteLine(res);
  }
}

Подробнее: https://stackoverflow.com/a/17004406/4928642.

READ ALSO
Как работает RedirectToAction()

Как работает RedirectToAction()

Сначала я думал, что RedirectToAction() срабатывает сразу и как бы просто вызывается другой методНо стало казаться, что RedirectToAction() сначала отправляет...

221
Exception при отправке писем вне домена // SMTP // C#

Exception при отправке писем вне домена // SMTP // C#

При отправке писем с помощью данного метода, письмо отправляются только на доменные п/яПри попытке отправить на иные (Google, Mail

171
Задержка при вызове событий OnMouse()

Задержка при вызове событий OnMouse()

Создал собственный Control для всех кнопок, чтобы все кнопки имели графический видПример кода:

129
Не работает MetroMessageBox

Не работает MetroMessageBox

У MetroMessageBox нет метода ShowMetroFrameWork установлен и подключен

186