如何在.NET中的字符串中仅使用正则表达式搜索/替换第一个匹配项?

问题描述 投票:25回答:5

似乎.NET Regex.Replace方法自动替换所有匹配的事件。我可以提供一个MatchEvaluator委托,它在第一次替换后返回匹配的字符串,不会发生任何变化,但这对我来说效率非常低。

第一次更换后停止的最有效方法是什么?

.net regex
5个回答
28
投票

来自MSDN

Replace(String, String, Int32)   

在指定的输入字符串中,使用指定的替换字符串替换与正则表达式模式匹配的指定最大字符串数。

这不是你想要的吗?


25
投票

只是回答原始问题......以下正则表达式仅匹配单词foo的第一个实例:

(?<!foo.*)foo

这个正则表达式使用负向lookbehind(?<!)来确保在匹配之前没有找到foo的实例。


3
投票

您可能正在使用静态方法。没有(String,String,Int32)重载。首先构造一个正则表达式对象并使用myRegex.Replace。


0
投票

在这种情况下,你不能使用:

string str ="abc546_$defg";
str = Regex.Replace(str,"[^A-Za-z0-9]", "");

相反,你需要声明新的Regex实例并像这样使用它:

string str ="abc546_$defg";
Regex regx = new Regex("[^A-Za-z0-9]");
str = regx.Replace(str,"",1)

注意1,它表示替换应发生的次数。


0
投票

你也可以做,而不是创建一个new Regex

Regex.Replace(originalString, "^"+pattern, stringToReplaceWith);

替换第一次出现。

© www.soinside.com 2019 - 2024. All rights reserved.