似乎.NET Regex.Replace方法会自动替换所有匹配的匹配项。我可以提供一个MatchEvaluator委托,它在第一次替换后返回匹配的字符串,不会发生任何变化,但这对我来说效率非常低。
第一次更换后停止的最有效方法是什么?
答案 0 :(得分:28)
答案 1 :(得分:25)
回答原始问题......以下正则表达式仅匹配单词foo的第一个实例:
(?<!foo.*)foo
这个正则表达式使用负向lookbehind(?&lt;!)来确保在匹配之前没有找到foo的实例。
答案 2 :(得分:3)
您可能正在使用静态方法。没有(String,String,Int32)重载。首先构造一个正则表达式对象并使用myRegex.Replace。
答案 3 :(得分: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 ,它表示替换应发生的次数。
答案 4 :(得分:0)
而不是创建new Regex
,您也可以
Regex.Replace(originalString, "^"+pattern, stringToReplaceWith);
替换第一次出现。