c# - 您如何使用正则表达式来替换特定的匹配项(例如 "last"或 "second to last")?

标签 c# .net regex matchevaluator

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

Regex.Replace(BaseString, MatchString, ReplacementString)

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

有什么帮助吗?

最佳答案

MatchEvaluator 只是一个委托(delegate)。您传入函数。

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

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

                        if (last)
                            return match.Value;
                        else
                            return ReplacementString;
                    }, RegexOptions.Compiled);

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

另请参阅此问题以获取有关如何使用 MatchEvaluator 的更多信息:How does MatchEvaluator in Regex.Replace work?

关于c# - 您如何使用正则表达式来替换特定的匹配项(例如 "last"或 "second to last")?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4566867/

相关文章:

javascript - 使用 javascript 和 regEx 将表情符号的路径替换为其 unicode

c# - .NET Windows 窗体问题的自定义设计器类

c# - 在 VisulaStudio 2017 上创建和编辑 ASP.net Web 表单项目

c# - 新的或修改的日历事件的 EWS PullSubscription

.net - .NET 中的速度和 XML 解析 - 序列化与 XML DOM 比较?

php - 使用php检测引号外的字符

c# - 在 c# 代码中删除监听器/禁用跟踪源的日志

c# - win2D uwp 不会在 inkcanvas 中保存高亮笔画

c# - XDocument 将制表符更改为空格

C++14 regex_search 0 匹配