循环遍历某个字符串的所有出现,并在 C# 中用不同的值替换每个字符串?

One*_*nly 2 c#

我有一个很大的文本字符串(它是一个源代码),我需要遍历某个字符串的出现(它可以出现在随机数量的地方),并用不同的值替换它们中的每一个,我不能使用Replace() 函数考虑到它用唯一值替换所有这些。

所以例如这个文本字符串:

REPLACE_ME

REPLACE_ME

REPLACE_ME
Run Code Online (Sandbox Code Playgroud)

需要转换为:

RAND_STRING1

RAND_STRING2

RAND_STRING3
Run Code Online (Sandbox Code Playgroud)

我一次阅读了整个文本,并且已经将它保存在一个字符串变量中。

Mat*_*sen 5

Regex.Replace()接受一个MatchEvaluator委托,你可以用它来完成你想要的:

var input = "REPLACE_ME REPLACE_ME REPLACE_ME";

var substring = Regex.Escape("REPLACE_ME");
var substitute = "VALUE";
var counter = 1;

var result = Regex.Replace(input, substring, (m) => $"{prefix}{counter++}");
Run Code Online (Sandbox Code Playgroud)

resultwill 的值是"VALUE1 VALUE2 VALUE3"

Regex.Escape()对于这个特定的例子,调用是多余的("REPLACE_ME"不包含任何需要转义的特殊字符),但我建议养成转义文字子字符串的习惯 - 特别是如果你想接受用户提供的输入!

当然,您可以在评估器中做任何您想做的事情:

var random = new Random();
var result = Regex.Replace(input, substring, (m) => random.Next().ToString());
// or
var result = Regex.Replace(input, substring, (m) => {
    var randomString = someAPIClient.GetRandomValueFromRandomValueService();
    var encoded = Encoding.UTF8.GetBytes(randomString);
    return Convert.ToBase64String(encoded);
});
Run Code Online (Sandbox Code Playgroud)

你的想象力在这里设置了极限:)