2012-12-20 11 views
3

我已經看到了這個CheatSheet for Regex in C#正則表達式,而不是功能與string.replace

不過,我試圖創建一個正則表達式的功能,可以爲我更換此:

while (fname.Contains("..")) 
{ 
    fname = fname.Replace("..", "."); 
} 
if (fname.StartsWith(".")) { 
    fname= fname.Remove(0, 1); 
} 
fname = fname.Replace("&", "_"); 
fname = fname.Replace("#", "_"); 
fname = fname.Replace("{", "_"); 
fname = fname.Replace("}", "_"); 
fname = fname.Replace("%", "_"); 
fname = fname.Replace("~", "_"); 
fname = fname.Replace("?", "_"); 

我根本就沒有得到如何編寫正確的解決這個問題的正則表達式。 任何人都可以幫我一把嗎?

+3

那麼你能指望什麼,如果你過早地發佈!? –

+0

@WillVousden當我輸入時添加了它?我正在更新它。沒有辦法讓我顯示我正在更新它。 – Rob

+0

你確定'fname.Replace(「..」,「。」);'按預期工作嗎? –

回答

7
string dotsPattern = @"\.\.+"; //2 or more dots. 
fname=Regex.Replace(fname, dotsPattern ,"."); 
String firstSymbolDot = @"^\."; 
fname = Regex.Replace(fname, firstSymbolDot, String.Empty); 
string symbolPattern = "[&#{}%~?]"; //any of given symbol; 
string result = Regex.Replace(fname, symbolPattern, "_"); 
+0

你現在沒有使用symbolPattern,但我知道它應該在Replace後面(fname,symbolPattern,「 _「); 謝謝:) – Rob

0

爲什麼你在fname=fname.Replace("..", ".");上循環,你是否試圖用一個點替換多個點的所有序列?

這就是:

fname=Regex.Replace(fname,@"\.+","."); 

至於其他人:

fname=Regex.Replace(
    Regex.Replace(
     fname, 
     @"&|\#|\{|\}|%|~|\?", 
     "_" 
    ), 
    @"^\.", 
    "" 
); 
相關問題