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

时间:2008-09-29 12:47:22

标签: .net regex

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

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

5 个答案:

答案 0 :(得分:28)

来自MSDN

Replace(String, String, Int32)   
  

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

这不是你想要的吗?

答案 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);

替换第一次出现。