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

spo*_*son 26 .net regex

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

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

bzl*_*zlm 28

来自MSDN:

Replace(String, String, Int32)   
Run Code Online (Sandbox Code Playgroud)

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

这不是你想要的吗?


小智 25

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

(?<!foo.*)foo

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


小智 5

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


Pin*_*yni 5

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

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,它代表替换应该发生的次数。