正则表达式去除特殊字符

22

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

此外,是否可以将"George's"更改为"George"(删除单引号和字符s)?


3
至少要定义“特殊字符”。 - BoltClock
你的意思是:删除所有不是字母、数字或空格的内容吗? - Goran Jovic
4个回答

58

这个方法将删除除字母、数字和空格之外的一切内容。它还会删除任何跟在字符 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);
}

嗨,Ryan,谢谢你的代码。它运行得很好。是否可以忽略空格?我想保留空格。谢谢。 - user374760
嗨,Ryan,我们不想从字符串中删除空格。请告诉我如何做。我将其标记为解决方案。谢谢。 - user374760
1
[^a-z0-9 ] 表示查找任何不是 a 到 z 或 0 到 9 或空格的字符。如果在将来需要排除其他字符,则可以将它们添加到该组中。 - Ryan Pedersen
如何同时删除空格?您的正则表达式需要修改什么? - anhtv13

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

Ryan的回答是正确的。只需添加A-Z,因为许多人都需要它。


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

0

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

对于你的另一个问题,如果你关心某些情况(比如只在它前面有一个单词时才删除's),你可以根据前一个单词定义要删除的内容,否则就删除所有出现的's


1
我认为你的意思是s/\W+//gtr///不支持正则表达式,而“单词字符”的集合包括远不止[A-Za-z0-9])。C#版本应该是Regex.Replace(input, @"\W+", String.Empty) - Alan Moore
@Alan Moore 你是对的,我忘了那个 =)。关于单词字符,我知道这一点,实际上我认为那就是他想要的。 - javs
是的,我加入了有关单词字符的部分,以便我们都不会被tchrist责备。 :D - Alan Moore

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接