5

我正在尝试替换字符串中的单个(最后一个或倒数第二个)匹配项。我已经有我的正则表达式并且它可以工作,但是它替换了所有项目,然后我必须运行并替换单个项目。

Regex.Replace(BaseString, MatchString, ReplacementString)

我想使用 MatchEvaluator 但不知道如何。

有什么帮助吗?

4

3 回答 3

13

MatchEvaluator 只是一个委托。你传入你的函数。

在你的情况下,使用类似的东西:

Regex.Replace(BaseString,MatchString,委托(匹配匹配)
                    {
                        bool last = match.NextMatch().Index == 0;

                        如果(最后)
                            返回匹配值;
                        别的
                            返回替换字符串;
                    },正则表达式选项。编译);

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

另请参阅此问题以获取有关如何使用 MatchEvaluator 的更多信息:Regex.Replace 中的 MatchEvaluator 如何工作?

于 2010-12-30T22:50:29.320 回答
4

这是替换字符串中的最后一次出现:

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));

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

于 2010-12-30T22:58:09.030 回答
0

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

于 2010-12-30T22:49:35.987 回答