Как удалить список символов из строки

Как я могу удалить определенный список символов из строки?

Например, у меня есть строка Multilanguage File07, и я хочу удалить все гласные, пробелы и числа, чтобы получить строку MltlnggFl.

Есть ли способ короче, чем использование петли foreach?

string MyLongString = "Multilanguage File07";
string MyShortString = MyLongString;
char[] charlist = new char[17]
  { 'a', 'e', 'i', 'o', 'u',
    '0', '1', '2', '3', '4', '5',
    '6', '7', '8', '9', '0', ' ' };
foreach (char letter in charlist)
{
    MyShortString = MyShortString.Replace(letter.ToString(), "");
}

"короче", что именно вы имеете в виду? меньше кода?

Mong Zhu 07.09.2018 08:19

Мне не нравится а) способ написания такого количества апострофов (') и б) необходимость подсчета количества символов (в этом случае [17]) для определения списка символов.

Michael Hutter 07.09.2018 09:51
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
102
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Используйте этот код для замены списка символов в строке:

using System.Text.RegularExpressions;
string MyLongString = "Multilanguage File07";
string MyShortString = Regex.Replace(MyLongString, "[aeiou0-9 ]", "");

Результат:
Multilanguage File07 => MltlnggFl
Text from which some chars should be removed 12345 => Txtfrmwhchsmchrsshldbrmvd

Объяснение, как это работает:
Выражение Regex, которое я использую здесь, представляет собой список независимых символов, определенных скобками []
=> [aeiou0-9 ]
Regex.Replace () выполняет итерацию по всей строке и проверяет каждый символ, если он соответствует одному из символов в регулярном выражении. Каждая совпадающая буква будет заменена пустой строкой ("").

Я добавил Пояснение, как это работает. Спасибо за подсказку :-)

Michael Hutter 07.09.2018 12:16

Как насчет этого:

var charList = new HashSet<char>(“aeiou0123456789 “);

MyLongString = new string(MyLongString.Where(c => !charList.Contains(c)).ToArray());

проголосовать за использование HashSet и за удаление двойного оператора linq

Mong Zhu 07.09.2018 08:50

Мне это не нравится, потому что это еще слишком много для написания (слишком много апострофов и запятых). Для каждого символа нужно набрать на клавиатуре не менее 4 букв ...

Michael Hutter 07.09.2018 10:32

Отредактировал ответ.

Gauravsa 07.09.2018 10:40

Попробуйте этот шаблон: (?|([aeyuio0-9 ]+)). Замените его пустой строкой, и вы получите желаемый результат.

Я использовал сброс ветки (?|...), чтобы все символы были объединены в одну группу для упрощения манипуляции.

Демо.

Спасибо за ссылку на regex101.com. Этот сайт действительно хорош! Но я до сих пор не понимаю, для чего нужен термин (?|...). Если я его не использую, я все равно получаю только 1 группу регулярных выражений.

Michael Hutter 07.09.2018 10:30

@MichaelHutter Тебе не обязательно его использовать. Но когда вы воспользуетесь \1 взамен и поиграете с ним, вы поймете, как это работает. Но только для вашей задачи, сброс ветки (?|...) не требуется. Если мой ответ вам помог, вы должны принять его (зеленая галочка слева) и, при желании, проголосовать за.

Michał Turczyn 07.09.2018 10:36
public void removeVowels()
{
       string str = "MultilanguAge File07";
       var chr = str.Where(c => !"aeiouAEIOU0-9 ".Contains(c)).ToList();
       Console.WriteLine(string.Join("", chr));
}

1-я строка: создает желаемую строковую переменную.

2-я строка: с использованием linq игнорирует гласные слова [заглавные буквы, строчные буквы, цифры 0-9 и пробел] и преобразует их в список.

3-я строка: объединяет список chr в одну строку с помощью функции string.join.

результат: MltlnggFl7

Примечание: removeVowels функция не только строчных букв, цифр от 1 до 9 и пустого места, но и удаления прописных слов из строки.

Другие вопросы по теме