c#正则表达式匹配并使用函数替换

时间:2012-07-30 16:47:26

标签: c# regex

/// <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

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

有谁知道如何解决这个限制?

2 个答案:

答案 0 :(得分:3)

如果$1参数是字符串,则只能使用replacement表示法,因此您最终将$1作为文字字符串传递给int.Parse方法。< / p>

相反,请使用匿名方法(String, String, MatchEvaluator)重载:

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

答案 1 :(得分:-1)

我不完全确定我理解你,如果我离开,请耐心等待。

 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返回一个字符串,你应该好好去。