如何使用正则表达式替换特定匹配(例如“最后”或“倒数第二”)?
我正在尝试替换字符串中的单个(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));
如果您可以提供倒数第二个应该替换的时间,我可以编辑答案以包含它。
在循环中查找,保存最后一个匹配位置,然后替换