输入字符串是这样的:
A线:50
线路N: 120
A线:12
B线:53
我想用以下结果替换 LineB 值MultiplyCalculatorMethod(LineAValue)
, where LineAValue
是上面一行的值LineB
and 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 值。
您可以像这样使用 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);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)