如何使用正则表达式替换特定匹配(例如“最后”或“倒数第二”)?

我正在尝试替换字符串中的单个(last或next-to-last)匹配。 我已经有了我的正则表达式并且它可以工作,但它取代了所有项目,然后我必须重新运行并替换单个项目。

 Regex.Replace(BaseString,MatchString,ReplacementString)

我想使用MatchEvaluator,但无法弄清楚如何。

有帮助吗?

MatchEvaluator只是一个委托。 你传递了你的function。

在您的情况下,使用如下:

 Regex.Replace(BaseString,MatchString,delegate(Match match)
                     {
                         bool last = match.NextMatch()。Index == 0;

                        如果(最后)
                            返回匹配。值;
                        其他
                             return ReplacementString;
                     },RegexOptions.Compiled);

此代码会跳过最后一场比赛。 您也可以以类似的方式检查倒数第二场比赛。

另请参阅此问题以获取有关如何使用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)); 

如果您可以提供倒数第二个应该替换的时间,我可以编辑答案以包含它。

在循环中查找,保存最后一个匹配位置,然后替换