Regex удалить специальные символы

Нам нужна функция С#, которая удалит все специальные символы из строки.

Кроме того, можно ли изменить "Джордж" на "Джордж" (удалить как одиночные кавычки, так и символы)?

Ответ 1

Этот метод удалит все, кроме букв, цифр и пробелов. Он также удалит любой символ "или", за которым последует символ s.

public static string RemoveSpecialCharacters(string input)
{
    Regex r = new Regex("(?:[^a-z0-9 ]|(?<=['\"])s)", RegexOptions.IgnoreCase | RegexOptions.CultureInvariant | RegexOptions.Compiled);
    return r.Replace(input, String.Empty);
}

Ответ 2

public static string RemoveSpecialCharacters(string input)
{    
    Regex r = new Regex(
                  "(?:[^a-zA-Z0-9 ]|(?<=['\"])s)",
                  RegexOptions.IgnoreCase | RegexOptions.CultureInvariant | RegexOptions.Compiled);
    return r.Replace(input, String.Empty);    
}

Ответ Райана правильный. Просто добавьте A-Z, как и многие люди, нуждающиеся в этом.

Ответ 3

Помогло бы, если бы мы знали, что такое особый персонаж. Здесь функция, которая сделает трюк

public bool IsSpecialChar(char c) {
  // Need you to fill this out
}

public string RemoveSpecialChars(string s) {
  var builder = new System.Text.StringBuilder();
  foreach (var cur in s) {
    if (!IsSpecialChar(cur)) {
      builder.Append(cur);
    }
  }
  return builder.ToString();
}

Ответ 4

Лучше определить список символов, которые вы хотите сохранить, вместо перечисления всех других, которые вам не нужны. Например, использование perlregexes s/[^A-Za-z0-9]+//g удалит любой символ без слова (извините, я не знаком с С# regexes: D).

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