似乎.NET Regex.Replace方法自动替换所有匹配的事件.我可以提供一个MatchEvaluator委托,它在第一次替换后返回匹配的字符串,不会发生任何变化,但这对我来说效率非常低.
第一次更换后停止的最有效方法是什么?
bzl*_*zlm 28
来自MSDN:
Replace(String, String, Int32)
Run Code Online (Sandbox Code Playgroud)
在指定的输入字符串中,使用指定的替换字符串替换与正则表达式模式匹配的指定最大字符串数.
这不是你想要的吗?
小智 25
只是回答原始问题......以下正则表达式仅匹配单词foo的第一个实例:
(?<!foo.*)foo
这个正则表达式使用负向lookbehind(?<!)来确保在匹配之前没有找到foo的实例.
在这种情况下你不能使用:
string str ="abc546_$defg";
str = Regex.Replace(str,"[^A-Za-z0-9]", "");
Run Code Online (Sandbox Code Playgroud)
相反,您需要声明新的 Regex 实例并像这样使用它:
string str ="abc546_$defg";
Regex regx = new Regex("[^A-Za-z0-9]");
str = regx.Replace(str,"",1)
Run Code Online (Sandbox Code Playgroud)
注意1,它代表替换应该发生的次数。