每次用不同的字符串替换相同的字符串

时间:2015-11-15 18:32:58

标签: c# regex

我有一个字符串,在不同的地方包含相同的。例如:

  

萨拉姆。男人yaxsiyam森内森? Sen ne vaxt geleceksen? Sen oralarda ne edirsen?

如何更改此字符串,如下所示?

  

萨拉姆。男人yaxsiyam sen1 necesen? Sen2 ne vaxt geleceksen? Sen3 oralarda ne edirsen?

P.S我搜索但找不到任何来源。

我还尝试了string.Replace()StringBuilder.Replace()Regex.Replace()方法。但没达到结果。

2 个答案:

答案 0 :(得分:2)

您确实可以使用Regex.Replace。您可以将overloadMatchEvaluatorRegex.Replace(string input, string pattern, MatchEvaluator evaluator))一起使用。此方法将所有与指定正则表达式匹配的字符串替换为MatchEvaluator委托返回的字符串。例如:

int i = 0;
string s = "Salam. Men yaxsiyam sen necesen? Sen ne vaxt geleceksen? Sen oralarda ne edirsen?";
Console.WriteLine(Regex.Replace(s, "(?i)sen", match => match.Value + i++));

输出:

  

萨拉姆。男人yaxsiyam sen0 necesen1? Sen2 ne vaxt geleceksen3? Sen4 oralarda ne edirsen5?

但这只是一个例子。你可以做得更多。
修改
此正则表达式(\s(?i)sen(?=\s))的起始i为1,将提供您想要的完全相同的结果。

答案 1 :(得分:1)

Regex.Replace将完成工作,如果您只想匹配完整的字词,则可以使用群组。

var str = "Salam. Men yaxsiyam sen necesen? Sen ne vaxt geleceksen? Sen oralarda ne edirsen?";
int indexer = 0;
var str2 = Regex.Replace(str, @"(?<pre>[^\w])(?<content>sen)(?<post>[^\w])", m => m.Groups["pre"].Value + m.Groups["content"].Value + (indexer++) + m.Groups["post"].Value, RegexOptions.IgnoreCase);