2009-04-20 42 views
7

輸入字符串是這樣的:如何正則表達式與方法結果替換匹配組項目

LINEA:50

LineB:120

LINEA:12

LineB:53

我想用MultiplyCalculatorMethod(LineAValue)的結果替換LineB值,其中LineAValue是以上的行的值和MultiplyCalculatorMethod是我另一種複雜的C#方法。

在半碼,我願做這樣的事情:

int MultiplyCalculatorMethod(int value) 
{ 
    return 2 * Math.Max(3,value); 
} 
string ReplaceValues(string Input) 
{ 
    Matches mat = Regex.Match(LineA:input_value\r\nLineB:output_value) 
    foreach (Match m in mat) 
    { 
     m.output_value = MultiplyCalculatorMethod(m.input_value) 
    } 
    return m.OutputText; 
} 

Example: 

string Text = "LineA:5\r\nLineB:2\r\nLineA:2\r\nLineB:7"; 
string Result = ReplaceValues(Text); 
//Result = "LineA:5\r\nLineB:10\r\nLineA:2\r\nLineB:6"; 

我寫了一個Regex.Match匹配LineA: value\r\nLineB: value和團體獲得這些值。但是當我使用Regex.Replace時,我只能提供一個「靜態」結果,即將來自匹配的組合在一起,但我不能在那裏使用C#方法。

所以我的問題是如何Regex.Replace其中結果是C#方法的結果,其中輸入是LineA值。

+0

@tomaszs:它並不完全清楚,我。也許提供你期望的給定輸入字符串的結果字符串會有所幫助。 – 2009-04-20 11:43:01

回答

4

嘗試使用以下替換過載。

public static string Replace(string input, string pattern, MatchEvaluator evaluator); 

MatchEvaluator有權訪問匹配內容,並且可以調用任何其他方法來返回替換字符串。

7

可以使用MatchEvaluator這樣的:

public static class Program 
{ 
    public static void Main() 
    { 
     string input = "LineA:5\r\nLineB:2\r\nLineA:2\r\nLineB:7"; 
     string output = Regex.Replace(input, @"LineA:(?<input_value>\d+)\r\nLineB:\d+", new MatchEvaluator(MatchEvaluator)); 
     Console.WriteLine(output); 
    } 

    private static string MatchEvaluator(Match m) 
    { 
     int inputValue = Convert.ToInt32(m.Groups["input_value"].Value); 
     int outputValue = MultiplyCalculatorMethod(inputValue); 

     return string.Format("LineA:{0}\r\nLineB:{1}", inputValue, outputValue); 
    } 

    static int MultiplyCalculatorMethod(int value) 
    { 
     return 2 * Math.Max(3, value); 
    } 
} 
相關問題