2010-09-13 7 views
1

Est-il possible d'utiliser regex pour remplacer seulement X nombre d'occurrences d'une chaîne particulière? Par exemple, si j'ai 10 fois le mot 'lion' dans une chaîne, est-ce que je pourrais utiliser regex pour remplacer seulement les 6 premières occurrences au lieu de toutes?Remplacement de chaîne limité en utilisant regex?

Répondre

3

La surcharge qui prend un paramètre « count » devrait faire ce que vous voulez.

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

La sortie doit être: "chat chien chat chien chien"

+0

Merci pour l'exemple! Fonctionne parfaitement! –

0

Le code suivant peut aider.

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

La sortie est donkeydonkeydonkeydonkeydonkeydonkeylionlionlionlion.

Vous pouvez également modifier la chaîne de remplacement dynamique comme suit:

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

Ensuite, la sortie est donkey[0]donkey[4]donkey[8]donkey[12]donkey[16]donkey[20]lionlionlionlion.