2010-12-11 105 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還有很多人會需要它。