如何在C#中的正则表达式替换操作中使用计算值?
我正在寻找一种方法,用c#regex.replace函数在replace表达式中使用匹配组的长度 也就是说,我可以替换什么???在下面的示例中使用,以获得如下所示的所需输出 示例:如何在C#中的正则表达式替换操作中使用计算值?,c#,regex,C#,Regex,我正在寻找一种方法,用c#regex.replace函数在replace表达式中使用匹配组的长度 也就是说,我可以替换什么???在下面的示例中使用,以获得如下所示的所需输出 示例: val = Regex.Replace("xxx", @"(?<exes>x{1,6})", "${exes} - ???"); X - 3 注意:这是一个非常精心设计/简化的示例来演示该问题。我意识到在这个例子中,正则表达式并不是实现这一点的理想方法。请相信我,答案的实际应用是一个更复杂问题的一部分
val = Regex.Replace("xxx", @"(?<exes>x{1,6})", "${exes} - ???");
X - 3
注意:这是一个非常精心设计/简化的示例来演示该问题。我意识到在这个例子中,正则表达式并不是实现这一点的理想方法。请相信我,答案的实际应用是一个更复杂问题的一部分,需要在此处使用正则表达式替换。尝试使用调用函数来确定替换文本的
RegEx.replace
:
public string Replace(string, MatchEvaluator);
然后,函数可以查看匹配的文本(将Match
对象作为参数提供给evaluator函数),并返回一个具有正确计算值的字符串。请重试
val = Regex.Replace("xxx", @"(?<exes>x{1,6})", new MatchEvaluator(ComputeReplacement));
(部分从正则表达式食谱中偷来——我的圣经哈哈)如果您使用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()
)
);
string val=Regex.Replace(
“xxx”,
@“(?{1,6})”,
新匹配评估器(
m=>m.Groups[“exes”].Value[0]+“-”+m.Groups[“exes”].Value.Length.ToString()
)
);
在C#2中,您可以使用委托:
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();
}
)
);
string val=Regex.Replace(
“xxx”,
@“(?{1,6})”,
新匹配评估器(
代表(匹配m){
返回m.Groups[“exes”].Value[0]+“-”+m.Groups[“exes”].Value.Length.ToString();
}
)
);
谢谢。我在想我需要这样做,但在我走这条路之前,我只是想看看是否有一个关键字可以被replace识别,以简化这个操作。尽管如此,你还是得到了我的支持,如果没有人用速记的方式来回答,我会接受这个答案。在C#4中,至少创建一个新的MatchEvaluator
,lambda表达式可以直接使用。string val=Regex.Replace(“xxx”,@“(?x{1,6})”,m=>m.Groups[“exes”]。Value[0]+“-”+m.Groups[“exes”].Value.Length.ToString());
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();
}
)
);