假设我在text.txt中:

prop:"txt1"  prop:'txt4'  prop:"txt13"


我希望它成为(加9):

prop:"txt10"  prop:'txt13'  prop:"txt22"


在javascript中,它将是:

var output = input.replace(/prop:(['"])txt(\d+)\1/g, function(match, quote, number){
    return "prop:" + quote + "txt" + (parseInt(number) + 9) + quote;
});


我正在尝试在C#中编码以上代码:

string path = @"C:/text.txt";
string content = File.ReadAllText(path);
File.WriteAllText(path, Regex.Replace(content, "prop:(['\"])txt(\\d+)\\1", ?????));


Visual Studio显示第三个参数应为MatchEvaluator evaluator。但是我不知道如何声明/编写/使用它。

欢迎任何帮助。谢谢你的时间。

最佳答案

您可以使用Match evaluator并使用Int32.Parse将该数字解析为一个int值,您可以将9加到:

Regex.Replace(content, @"prop:(['""])txt(\d+)\1",
m => string.Format("prop:{0}txt{1}{0}",
     m.Groups[1].Value,
    (Int32.Parse(m.Groups[2].Value) + 9).ToString()))


参见IDEONE demo

var content = "prop:\"txt1\"  prop:'txt4'  prop:\"txt13\"";
var r = Regex.Replace(content, @"prop:(['""])txt(\d+)\1",
    m => string.Format("prop:{0}txt{1}{0}",
         m.Groups[1].Value,
        (Int32.Parse(m.Groups[2].Value) + 9).ToString()));
Console.WriteLine(r); // => prop:"10"  prop:'13'  prop:"22"


请注意,我使用逐字字符串文字,以便使用单个反斜杠转义特殊字符并定义速记字符类(但是,在逐字字符串文字中,双引号必须加倍以表示单个文字双引号)。

10-05 23:54