2014-11-22 79 views
4

我有以下字符串:aWesdE,我想用Regex.Replace(string, string, string, RegexOptions)爲什麼我的Regex.Replace字符串包含替換值兩次?

目前轉換爲http://myserver.com/aWesdE.jpg,我用這個代碼:

string input = "aWesdE"; 
string match = "(.*)"; 
string replacement = "http://myserver.com/$1.jpg"; 
string output = Regex.Replace(input, match, replacement, 
      RegexOptions.IgnoreCase | RegexOptions.Singleline); 

結果是輸出最終成爲:http://myserver.com/aWesdE.jpghttp://myserver.com/.jpg

因此,重置值正確顯示,然後再次出現 - 非常奇怪。這裏發生了什麼?

回答

6

實際上在您的正則表達式中有2個匹配。你確定你的對手是這樣的:

string match = "(.*)"; 

這意味着匹配零個或多個字符,所以你有2場比賽 - 空字符串和文本。爲了解決這個問題換着花樣給

string match = "(.+)"; 

這意味着匹配一個或多個字符 - 在這種情況下,你只會得到一個匹配

+0

這是沒有道理給我。 '(。*)'只是匹配任何東西。既然它很貪婪,它就會一齊吃掉。 – 2014-11-22 19:30:58

+0

@PatrickHofman如果使用上面的參數運行'Regex.Matches(input,match);',您會看到實際上有2個匹配項('aWesdE'和空字符串)。它們在替換時使用,這就是爲什麼使用'Replace'時會出現奇怪的結果。 – dotnetom 2014-11-22 19:37:32

+0

你說得對。我測試你的解決方案。雖然感覺奇怪。 +1 – 2014-11-22 19:44:54

相關問題