2012-07-30 48 views
0
/// <summary> 
/// Given HTML overlay for an image in the store, render it. 
/// [p:n] renders as price for item ID n 
/// </summary> 
/// <returns>Rendered result</returns> 
public static string RenderHTMLOverlay(string overlayHTML, int currencyID) 
{ 
    const string pattern = "\\[p\\:(\\b\\d+\\b)\\]"; 
    overlayHTML = Regex.Replace(overlayHTML, pattern, FormatCurrency(GetItemPriceOnDate(DateTime.Now, currencyID, int.Parse("$1")))); 

    return overlayHTML; 
} 

這不起作用,因爲$1不能作爲參數正確地傳遞到int.Parse取代。C#正則表達式匹配和使用功能

Exception Details: System.FormatException: Input string was not in a correct format. 

有誰知道我該如何解決這個限制?

+3

與問題無關,但我建議使用'@「\ [p \:(\ b \ d + \ b)\]」'而不是如果您的表達式爲'pattern'。意味着同樣的事情,更具可讀性。 – ikh 2012-07-30 16:55:58

+1

更好:'@「\ [p:(\ d +)\]」'。冒號不需要轉義,單詞邊界是多餘的。 – 2012-07-30 20:29:02

回答

2

您只能使用$1符號,如果replacement參數是一個字符串,所以你最終傳遞$1作爲一個字符串到int.Parse方法。

相反,使用(String, String, MatchEvaluator)過載與匿名方法:

Regex.Replace(overlayHTML, pattern, 
match => FormatCurrency(GetTiemPriceOnDate(DateTime.Now, currencyID, int.Parse(match.Groups[1].Value))) 
) 
+0

真棒謝謝你! – 2012-07-30 16:56:23

+1

嘎,你幾乎把我打敗了,Arithmomaniac。 :P – vergenzt 2012-07-30 16:56:55

0

我不能完全肯定我理解你,所以容忍我,如果我了。

Console.WriteLine(int.Parse("$1")); //throws exception Input string was not in a correct format. 

Console.WriteLine(int.Parse("$1".Replace("$", ""))); //Result: 1 

如果Store.CommonFunctions.GetItemPriceOnDate返回一個字符串,你要善於去。