使用带有可变文本的正则表达式替换文本?

时间:2009-04-21 09:50:26

标签: c# regex

假设我有一些带有“查找”字样实例的文本,我想用“Replace1”,“Replace2”,“Replace3”等文本替换它。数字是“出现次数”在文中找到“。 如何在C#中以最有效的方式做到这一点,我已经知道了循环方式。

2 个答案:

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