2015-03-19 32 views
2

我試圖取代所有「非字母數字字符」和「多空間」只有一張單人牀的空間只有1空間

我有2種工作溶液替換非字母數字字符和多個空格,但是我是想知道是否有可能將他們有效地結合起來?

鑑於

var str = "ASD S-DF 2134 [email protected]# 4 234234 #$)(u SD"; 
var options = RegexOptions.None; 

非字母數字字符

var rgxAlpha = new Regex("[^a-zA-Z0-9]"); 
str = rgxAlpha.Replace(str, " ", options); 

多個空格

var regexSpace = new Regex(@"[ ]{2,}", options); 
str = regexSpace.Replace(str, " "); 

預期結果

ASD S DF 2134 4 4 234234 u SD 

回答

5

略低於就足夠了,因爲[^a-zA-Z0-9]+比賽還有空間,你不需要添加[ ]{2,}明確。

string result = Regex.Replace(str, @"[^a-zA-Z0-9]+", " "); 

DEMO

2

假設他們都工作:

var rgxPattern = new Regex(@"[^a-zA-Z0-9]+|[ ]{2,}"); 

只需添加一個|它們之間。

0
string szOut= ""; 
    char previous; 
    foreach (char cr in str.ToCharArray()) 
    { 
      if(cr == ' '&& previous == ' ') 
       continue; 

      if (IsAlphaNumeric(cr)) 
       szOut+= cr; 

      previous = cr; 
    }  
    return szOut; 

....

public static Boolean IsAlphaNumeric(char cr) 
    { 
     return char.IsLetter(cr) || char.IsNumber(cr) || cr == ' '; 
    } 
+0

您可能需要使用StringBuilder獲得更好的性能。 – abatishchev 2015-03-19 01:56:37

+0

這是一個粗略的代碼模式,我會使用。爲了獲得最佳性能,直接使用char []並根據需要添加字符,然後執行String(array) – 2015-03-19 02:02:08

+0

您不需要調用ToCharArray()。 – abatishchev 2015-03-19 02:04:10