正则表达式删除特殊字符

时间:2010-12-11 18:34:53

标签: c# regex

我们需要一个C#函数,它将从字符串中删除所有特殊字符。

另外,是否可以将“George's”改为“George”(删除单引号和字符)?

4 个答案:

答案 0 :(得分:42)

此方法将删除除字母,数字和空格之外的所有内容。它还将删除任何'或'后跟字符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);
}

答案 1 :(得分:1)

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以及许多人需要它。

答案 2 :(得分:0)

如果我们知道特殊字符是什么,会有所帮助。这是一个功能虽然可以解决这个问题

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();
}

答案 3 :(得分:0)

最好定义一个你想要保留的字符列表,而不是枚举你不想要的所有其他字符。例如,使用perlregexes s/[^A-Za-z0-9]+//g将删除任何非单词字符(抱歉,我不熟悉c#regexes:D)。

对于您的其他问题,如果您关心某些情况(例如只有删除's前面有一个单词),您可以根据前一个单词定义要删除的内容,否则只删除所有出现的{ {1}}。