2012-11-06 70 views
0

我是否理解RegEx.Replace如何在C#/ .NET中工作?我想這一點:爲什麼這RegEx.Replace失敗,即使我匹配字符串?

測試:字符串

要成爲這樣的:

測試字符串

var cleanString = Regex.Replace("Test: String", @"^[\w\*\$][\w\s\-\$]*(\(\d{1,}\)){0,1}$", ""); 

然而,它cleanString計算結果爲:

測試:字符串

我在做什麼錯?

編輯︰我從第三方來源得到正則表達式驗證字符串,所以我可以使用該正則表達式驗證字符串或以某種方式找出正則表達式驗證字符串中的有效字符,並通過無效字符數組循環。這就是爲什麼我選擇做正則表達式,這是我從來沒有經常使用的。

+2

你爲什麼要使用正則表達式呢? – Woot4Moo

+1

您試圖通過RegEx解決問題:現在您有兩個問題! –

+0

我已經添加了爲什麼我使用RegEx(因爲我要關閉提供給我的RegEx驗證字符串,並且可能會更改),請編輯:僅僅是因爲RegEx而降低了這個值? –

回答

1

Regex.Replace不會做你想做的事情。 Regex.Replace中使用的正則表達式模式需要與要替換的字符串的位相匹配。

您嘗試使用的字符串驗證模式僅匹配有效的字符串。您可以使用此模式使用Regex.IsMatch來檢查字符串是否有效,但不會,也不能顯示字符串中的哪些字符阻止匹配成功。

您需要使用匹配不良字符的模式。針對這種情況的第一個刺將是[^\w\*\-\d\(\)\s\$]+。這將匹配驗證字符串不允許的任何字符,但仍然不夠好。例如,它與可選括號之間的非數字字符不匹配,並且不會強制執行一對匹配的括號。當你開始考慮所有可能的方式時,一個字符串可能無效,因爲單個正則表達式模式可以快速地去除無效字符。

+0

我誤解了Regex.Replace,謝謝! –

0

我這樣做:

Dictionary<string,string> whiteList = new Dictionary<string,string>(); 
//populate whitelist 
public StringBuilder cleanString(string dirtyInput) 
{ 
    StringBuilder sb = new StringBuilder();  
    foreach(char in dirtyInput)  
    { 
     if(null == dirtyInput.get(char) 
     { 
      sb.append(char); 
     } 
    } 
    return sb; 

} 

可能有點過爲我的Java可在出血。

相關問題