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

C# 每次用不同的字符串替换相同的字符串,c#,regex,C#,Regex,我有一个字符串,它在不同的位置包含相同的值。例如: 萨拉姆。你是亚克西亚姆·森·内切森吗?格勒塞克森先生?奥拉拉达·埃迪森参议员 我怎样才能像下面这样更改此字符串 萨拉姆。你是说什么?格勒塞克森先生?奥拉拉达·埃迪森先生 我搜索了一下,但找不到任何来源 我还尝试了string.Replace(),StringBuilder.Replace(),Regex.Replace()方法。但是没有达到结果。您确实可以使用Regex.Replace。您可以与MatchEvaluator(Regex.Repl

我有一个字符串,它在不同的位置包含相同的值。例如:

萨拉姆。你是亚克西亚姆·森·内切森吗?格勒塞克森先生?奥拉拉达·埃迪森参议员

我怎样才能像下面这样更改此字符串

萨拉姆。你是说什么?格勒塞克森先生?奥拉拉达·埃迪森先生

我搜索了一下,但找不到任何来源


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

您确实可以使用
Regex.Replace
。您可以与
MatchEvaluator
Regex.Replace(字符串输入、字符串模式、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++));
产出:

萨拉姆。有必要吗?你是怎么想的?你是说埃迪森

但这只是一个例子。你可以做得更多。
编辑

这个正则表达式(
\s(?i)sen(?=\s)
)从
i
开始,在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);
var str=“你是说你需要什么?你是说你需要什么?你是说你需要什么;
int索引器=0;
var str2=Regex.Replace(str,@“(?[^\w])(?[^\w])”,m=>m.Groups[“pre”].Value+m.Groups[“content”].Value+(indexer++)++m.Groups[“post”].Value,RegexOptions.IgnoreCase);

你能发布你尝试过的代码吗?你的模式到底是什么?您想只获取concat
sen
还是以数字开头的
1
?那么
sEn
sEn
等呢?@emperueraiman我想这样做的代码是完全错误的。这就是我不想分享它们的原因。但我张贴了我尝试过的方法。你提到的所有方法都适用于你的案例。很明显,但它不应该阻止你。。。请发布您尝试过的代码(以及您发现的解释特定方法的文章)。@SonerGönül:pattern is
Sen
。不应更换
sen
sen
geleceksen
。什么是
“(?i)sen”
?你能解释一下吗?你是什么意思?我并没有完全按照他想要的做,但他可以稍微改变一下,得到他想要的结果。“(?I)sen”是正则表达式模式。“(?i)”表示您忽略了案例。所以它与“sen”或“sen”或“sen”等匹配。。但如果这是你想要的,我会打电话给你。您可以更改正则表达式。@Mirjallatalalishinski,我已经编辑了我的答案。现在,它将给出您想要的结果。:)