我正在尝试替换字符串中的单个(最后一个或倒数第二个)匹配项。我已经有我的正则表达式并且它可以工作,但是它替换了所有项目,然后我必须运行并替换单个项目。
Regex.Replace(BaseString, MatchString, ReplacementString)
我想使用 MatchEvaluator 但不知道如何。
有什么帮助吗?
我正在尝试替换字符串中的单个(最后一个或倒数第二个)匹配项。我已经有我的正则表达式并且它可以工作,但是它替换了所有项目,然后我必须运行并替换单个项目。
Regex.Replace(BaseString, MatchString, ReplacementString)
我想使用 MatchEvaluator 但不知道如何。
有什么帮助吗?
MatchEvaluator 只是一个委托。你传入你的函数。
在你的情况下,使用类似的东西:
Regex.Replace(BaseString,MatchString,委托(匹配匹配) { bool last = match.NextMatch().Index == 0; 如果(最后) 返回匹配值; 别的 返回替换字符串; },正则表达式选项。编译);
此代码跳过最后一场比赛。您还可以以类似的方式检查倒数第二场比赛。
另请参阅此问题以获取有关如何使用 MatchEvaluator 的更多信息:Regex.Replace 中的 MatchEvaluator 如何工作?
这是替换字符串中的最后一次出现:
String testString = "It is a very good day isn't it or is it.Tell me?";
Console.WriteLine(Regex.Replace(testString,
"(.*)(it)(.*)$",
"$1THAT$3",
RegexOptions.IgnoreCase));
如果您可以提供倒数第二个应该被替换的时间,我可以编辑答案以包含它。
在循环中查找,保存最后一个匹配位置,然后替换