2014-02-14 736 views
3

這似乎是C#用戶的常見問題,經過研究和多次嘗試後,我無法爲我的生活從字符串中刪除一對括號。我遇到問題的字符串是Service (additional)C#刪除字符串的括號

經過我的研究,我明白括號在Regex.Replace中的處理方式不同。隨着我的研究也出現了多個我嘗試過的答案,但似乎沒有任何成效。以下是我嘗試刪除這些括號的一些方法。

cleanValue = Regex.Replace(intVal, " ", "").Replace("(", "").Replace(")", "").Replace(",", "").Replace("/", "").Replace("-", ""); 

cleanValue = Regex.Replace(intVal, " ", "").Replace(@"\(", "").Replace(@"\)", "").Replace(",", "").Replace("/", "").Replace("-", ""); 

cleanValue = Regex.Replace(intVal, " ", "").Replace("[()]", "").Replace(",", "").Replace("/", "").Replace("-", ""); 

cleanValue = Regex.Replace(intVal, " ", "").Replace(@"[^a-zA-Z]", "").Replace(",", "").Replace("/", "").Replace("-", ""); 

這些都不工作,逐步執行代碼我只看到「e」和「(」刪除之間的空間後,我失去的東西嗎?

如果任何人希望看到的function正被這裏使用它:

public static string CleanExtra(string intVal) 
    { 
     string cleanValue; 
     if (intVal == null) 
     { 
      throw new System.ArgumentException("Value cannot be null", "original"); 
     } 
     else 
     { 
      //cleanValue = Regex.Replace(intVal, " ", "").Replace("(", "").Replace(")", "").Replace(",", "").Replace("/", "").Replace("-", ""); 
      //cleanValue = Regex.Replace(intVal, " ", "").Replace(@"\(", "").Replace(@"\)", "").Replace(",", "").Replace("/", "").Replace("-", ""); 
      //cleanValue = Regex.Replace(intVal, " ", "").Replace("[()]", "").Replace(",", "").Replace("/", "").Replace("-", ""); 
      cleanValue = Regex.Replace(intVal, " ", "").Replace(@"[^a-zA-Z]", "").Replace(",", "").Replace("/", "").Replace("-", ""); 
     } 

     return cleanValue; 
    } 
+2

你爲什麼要使用正則表達式?你不能使用string.Replace()嗎? – Crono

+0

這只是第一種去掉我偶然發現的東西的方法。我會暫時嘗試替換字符串,但無論這應該也是一個選項。 – user2405778

+2

正則表達式旨在搜索模式,如十進制字符,大寫字母,看起來像電子郵件地址或電話號碼等等。如果您碰巧知道要替換的字符或字符串,string.Replace是更好的選擇,性能明智。 – Crono

回答

5

在您致電Regex.Replace(...)之後,您實際上使用的是string.Replace(...)。這使得您致電.Replace(@"[^a-zA-Z]", "")無用。

簡化IT,而不是到:

cleanValue = Regex.Replace(intVal, @"[^a-zA-Z]", ""); 

這應該刪除所有的空格和特殊字符是什麼樣子的你的代碼是試圖做。這包括括號。

+0

謝謝,這很有道理。 – user2405778

14

一個正則表達式是矯枉過正這裏,因爲這可以用一個簡單的Replace的調用來做到:

string val = intVal.Replace("(", "").Replace(")", ""); 
+0

我有一個問題,如果你不介意。從這個問題的評論中,人們一直在說,在我最初的'Regex.Replace(...)'後,後面的'.Replace'等於'string.replace'。如果是這種情況(如果這我沒有錯),爲什麼不能這樣工作: cleanValue = Regex.Replace(intVal,「」,「」).Replace(「(」,「」).Replace (「)」,「」).Replace(「,」,「」).Replace(「/」,「」).Replace(「 - 」,「」); – user2405778

+1

@ user2405778特定樣本應該可以正常工作 – JaredPar

+0

好的,奇怪的是它沒有,也許這是我遇到的另一個錯誤。謝謝你爲我清理這個。 – user2405778

3

這是因爲每秒Replace是在string上的調用,因此不會用正則表達式替換。

+0

所以你說如果第一個替換是刪除括號,他們只是回來時,我在正則表達式中的第二個替換? – user2405778

+2

'Regex.Replace'返回一個'string'。當調用'Replace'時,在你的第一次調用中沒有涉及到正則表達式(這就是爲什麼你首先調用'Regex.Replace') –

+0

噢好吧,謝謝你的清除。 – user2405778

相關問題