繁体   English   中英

通过增加每次出现次数来替换文本

[英]Replace a text by incrementing each occurence

我有一条短信说:

Hello
abc
Hello
def
Hello

我想将其转换为

Hello1
abc
Hello2
abc
Hello3

即我需要在每次出现“ Hello”文本后添加一个数字。

目前,我已编写此代码:

var xx = File.ReadAllText("D:\\test.txt");


var regex = new Regex("Hello", RegexOptions.IgnoreCase);
var matches = regex.Matches(xx);


int i = 1;
foreach (var match in matches.Cast<Match>())
{
    string yy = match.Value;
    xx = Replace(xx, match.Index, match.Length, match.Value + (i++));
}

上面使用的Replace方法是:

public static string Replace(string s, int index, int length, string replacement)
{
    var builder = new StringBuilder();
    builder.Append(s.Substring(0, index));
    builder.Append(replacement);
    builder.Append(s.Substring(index + length));
    return builder.ToString();
}

目前,上述代码无法正常运行,正在替换两者之间的文本。

你能帮我解决这个问题吗?

假设Hello只是一个更复杂的模式的占位符,这是一个简单的解决方法:在Regex.Replace中使用匹配评估器,可以在其中使用变量:

var s = "Hello\nabc\nHello\ndef\nHello";
var i = 0;
var result = Regex.Replace(
    s, "Hello", m => string.Format("{0}{1}",m.Value,++i), RegexOptions.IgnoreCase);
Console.WriteLine(result);

参见C#演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM