假设我有一些带有“查找”字样实例的文本,我想用“Replace1”,“Replace2”,“Replace3”等文本替换它。数字是“出现次数”在文中找到“。 如何在C#中以最有效的方式做到这一点,我已经知道了循环方式。
答案 0 :(得分:5)
MatchEvaluator
可以执行此操作:
string input = "FindbcFinddefFind", pattern = "Find";
int i = 1;
string replaced = Regex.Replace(input, pattern, match => "REPLACE" + i++);
请注意,match
变量也可以访问Match
等。使用C#2.0,您需要使用匿名方法而不是lambda(但效果相同) - 以显示这两个和Match
:
string input = "FindbcFinddefFind", pattern = "Find";
int i = 1;
string replaced = Regex.Replace(input, pattern, delegate(Match match)
{
string s = match.Value.ToUpper() + i;
i++;
return s;
});
答案 1 :(得分:3)
您可以使用带有MatchEvaluator
的重载,并在委托实现中提供自定义替换字符串,这样您就可以在一次传递中完成所有替换。
例如:
var str = "aabbccddeeffcccgghhcccciijjcccckkcc";
var regex = new Regex("cc");
var pos = 0;
var result = regex.Replace(str, m => { pos++; return "Replace" + pos; });