使用正则表达式更换有限的字符串?

时间:2010-09-13 21:17:35

标签: c# regex string replace

是否可以使用正则表达式仅替换特定字符串的X个出现次数?

例如,如果我在字符串中有10个单词'lion',我可以使用正则表达式来替换前6个出现而不是全部吗?

3 个答案:

答案 0 :(得分:3)

带有“count”参数的重载应该可以达到你想要的效果。

Regex cat = new Regex("cat");
string input = "cat cat cat cat cat";
Console.WriteLine(cat.Replace(input, "dog", 3));
Console.ReadLine();

输出应为: “狗狗狗猫猫”

答案 1 :(得分:2)

我从来没有用它,所以不能说有效性,但regex.replace有一个重载,需要int count来定义出现次数

http://msdn.microsoft.com/en-us/library/h0y2x3xs%28v=VS.90%29.aspx

答案 2 :(得分:0)

以下代码可能有所帮助。

string s = "lionlionlionlionlionlionlionlionlionlion";
System.Text.RegularExpressions.Regex r = new System.Text.RegularExpressions.Regex("lion");
s = r.Replace(s, "donkey", 6, 0);
Console.Out.Write(s);

输出为donkeydonkeydonkeydonkeydonkeydonkeylionlionlionlion

您还可以按如下方式动态更改替换字符串:

private string replaceMe(System.Text.RegularExpressions.Match m)
{
    return "donkey[" + m.Index.ToString() + "]";
}

private replaceStr() {
    string s = "lionlionlionlionlionlionlionlionlionlion";
    Regex r = new Regex("lion");
    s = r.Replace(s, new System.Text.RegularExpressions.MatchEvaluator(replaceMe),6);
    Console.Out.Write(s);
}

然后输出为donkey[0]donkey[4]donkey[8]donkey[12]donkey[16]donkey[20]lionlionlionlion