2010-12-11 104 views
10

我们需要一个C#函数,它将删除字符串中的所有特殊字符。正则表达式删除特殊字符

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

+3

至少界定’特殊字符“ – BoltClock 2010-12-11 18:36:23

+0

你的意思是:删除所有不是字母,数字或空格? – 2010-12-11 18:36:55

回答

37

此方法将删除除字母,数字和空格之外的所有内容。这也将删除任何“或者‘后面的字母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); 
} 
+0

嗨瑞安,感谢您的代码。它工作正常。是否有可能忽略白色空间。我想要空白处在那里。谢谢。 – user374760 2010-12-12 00:43:50

+0

如果这是答案,不要忘记标记为这样。 – 2010-12-12 01:39:52

+0

嗨瑞安,我们不想从字符串中删除空格。请让我知道如何去做。我将其标记为解决方案。谢谢。 – user374760 2010-12-12 01:59:02

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

其更好地定义要保留的,而不是列举你不希望其他所有字符的列表。例如,使用perlregexes s/[^A-Za-z0-9]+//g将删除任何非单词字符(对不起,我不熟悉c#正则表达式:D)。

您的其他问题,您可以定义以去除基于什么对前一个字,如果你在乎某些情况下(如只有去除's如果有前一个字),否则只是删除的's所有出现。

+1

我认为你的意思是'/ \ W + // g'('tr ///'不是正则表达式驱动的,字符“不仅仅包括'[A-Za-z0-9]'),C#版本将是'Regex.Replace(输入,@”\ W +“,String.Empty)'。 – 2010-12-12 21:49:21

+0

@Alan Moore you是对的,我忘记了=)。Regardi我意识到这一点,我确实认为这是他想要的。 – javs 2010-12-12 22:04:15

+0

是的,我投入了关于单词角色的这一点,以拯救我们两人从tchrist那里责骂。 :D – 2010-12-12 22:34:37

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还有很多人会需要它。