Ограниченная замена строк с использованием регулярных выражений? - PullRequest
1 голос
/ 14 сентября 2010

Можно ли использовать регулярное выражение только для замены числа X вхождений определенной строки?

Например, если у меня есть слово «лев» в строке 10 раз, могу ли я использовать регулярное выражение только длязаменить первые 6 вхождений вместо всех?

Ответы [ 3 ]

3 голосов
/ 14 сентября 2010

Перегрузка, которая принимает параметр "count", должна делать то, что вы хотите.

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

Вывод должен быть: "dog dog dog cat cat"

2 голосов
/ 14 сентября 2010

Я никогда не использовал его, поэтому не могу сказать, что он действителен, но regex.replace перегружен, и для определения количества вхождений используется счетчик int

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

0 голосов
/ 14 сентября 2010

Может помочь следующий код.

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...