当前位置:  开发笔记 > 编程语言 > 正文

如何使用方法结果替换匹配组项

如何解决《如何使用方法结果替换匹配组项》经验,为你挑选了1个好方法。

输入字符串是这样的:

LineA:50

LineB:120

LineA:12

LineB:53

我想与的结果来代替LineB值MultiplyCalculatorMethod(LineAValue),其中LineAValue高于该线的值LineBMultiplyCalculatorMethod是我的其他的,复杂的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其中Result是C#方法的结果,其中输入是LineA值.



1> Martin Brown..:

您可以像这样使用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:(?\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); 
    }
}

推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有