如何在c#中用动态值替换字符串?

Yus*_*aji 1 .net c#

我有这个代码:

string a = "**MustbeReplaced**asdgasfsff**MustbeReplaced**asdfafasfsa";
//MustbeReplaced should be Replaced1, Replaced2, and so on
a = a.Replace("MustbeReplaced", "Replaced"); 
Run Code Online (Sandbox Code Playgroud)

每次有字符串替换时,我想用动态值替换它.例如,上面字符串的输出应该是:

"**Replaced1**asdgasfsff**Replaced2**asdfafasfsa"
Run Code Online (Sandbox Code Playgroud)

我知道String.Replace,但据我所知,它只适用于静态String替换.

有没有办法做到这一点?

ang*_*son 5

您可以使用Regex该类并提供将为每个匹配调用一次的委托.它需要返回字符串以替换匹配的文本.

你只需声明一个持有你的计数器的变量:

string a = "**MustbeReplaced**asdgasfsff**MustbeReplaced**asdfafasfsa";
int replacementIndex = 0;
string b = Regex.Replace(a, "MustbeReplaced", match =>
{
    replacementIndex++;
    return $"Replaced{replacementIndex}";
});
Run Code Online (Sandbox Code Playgroud)

运行此之后,b将包含以下内容:

**Replaced1**asdgasfsff**Replaced2**asdfafasfsa
Run Code Online (Sandbox Code Playgroud)

警告:由于您现在正在使用Regex该类,因此请注意Regex将用于增强模式的所有特殊字符,使其远离简单的逐字符匹配.如果您要替换包含星号,问号,括号等符号的文本,那么您需要逃避这些.

幸运的是,我们可以简单地让Regex班级为我们这样做:

string a = "**Mustbe?Replaced**asdgasfsff**Mustbe?Replaced**asdfafasfsa";
int replacementIndex = 0;
string b = Regex.Replace(a, Regex.Escape("Mustbe?Replaced"), match =>
{
    replacementIndex++;
    return $"Replaced{replacementIndex}";
});
Run Code Online (Sandbox Code Playgroud)