我有一个字符串,在不同的地方包含相同的值。例如:
萨拉姆。男人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()
方法。但没达到结果。
答案 0 :(得分:2)
您确实可以使用Regex.Replace
。您可以将overload与MatchEvaluator
(Regex.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);