输入的字符串是这样的:
A 行:50
B 线:120
A 行:12
B 行:53
我想用 MultiplyCalculatorMethod(LineAValue)
的结果替换 LineB 值,其中 LineAValue
是 LineB
上方行的值> 和 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,其中 Result 是 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);
}
}
关于c# - 如何正则表达式用方法结果替换匹配组项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/767869/