似乎.NET Regex.Replace方法會自動替換所有匹配的事件。我可以提供一個MatchEvaluator委託,在第一次替換之後返回匹配的字符串,不會發生變化,但對我來說這聽起來效率很低。如何正則表達式搜索/只替換.NET中的字符串中的第一次出現?
第一次更換後停止的最有效方法是什麼?
似乎.NET Regex.Replace方法會自動替換所有匹配的事件。我可以提供一個MatchEvaluator委託,在第一次替換之後返回匹配的字符串,不會發生變化,但對我來說這聽起來效率很低。如何正則表達式搜索/只替換.NET中的字符串中的第一次出現?
第一次更換後停止的最有效方法是什麼?
只是爲了回答原來的問題...下面的正則表達式隻字foo的第一個實例相匹配:(?!<)
(?<!foo.*)foo
此正則表達式使用負回顧後以確保在匹配之前沒有發現foo的實例。
您可能正在使用靜態方法。沒有(String,String,Int32)重載。首先構造一個正則表達式對象並使用myRegex.Replace。
在這種情況下,你不能使用:
string str ="abc546_$defg";
str = Regex.Replace(str,"[^A-Za-z0-9]", "");
相反,你需要聲明新的正則表達式實例,並使用它像這樣:
string str ="abc546_$defg";
Regex regx = new Regex("[^A-Za-z0-9]");
str = regx.Replace(str,"",1)
通知的,它代表了應該發生替換的次數。
不用創建new Regex
,你也可以做
Regex.Replace(originalString, "^"+pattern, stringToReplaceWith);
更換一次出現。