我正在寻找一种方法,通过 c# regex.replace 函数在替换表达式中使用匹配组的长度。
也就是说,我可以替换什么???在以下示例中使用以获得如下所示的所需输出?
示例:
val = Regex.Replace("xxx", @"(?<exes>x{1,6})", "${exes} - ???");
期望的输出
X - 3
注意:这是一个非常人为/简化的例子来证明这个问题。我意识到对于这个例子,正则表达式不是这样做的理想方式。请相信我,答案在现实世界中的应用是更复杂问题的一部分,需要在此处使用 RegEx 替换。
最佳答案
如果您使用的是 C# 3,您可以简单地从 lambda 表达式创建一个 MatchEvaluator:
string val = Regex.Replace(
"xxx",
@"(?<exes>x{1,6})",
new MatchEvaluator(
m => m.Groups["exes"].Value[0] + " - " + m.Groups["exes"].Value.Length.ToString()
)
);
在 C# 2 中,您可以使用委托(delegate):
string val = Regex.Replace(
"xxx",
@"(?<exes>x{1,6})",
new MatchEvaluator(
delegate(Match m) {
return m.Groups["exes"].Value[0] + " - " + m.Groups["exes"].Value.Length.ToString();
}
)
);
关于c# - 如何在 C# 的 RegEx 替换操作中使用计算值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1256762/