假设我有 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
。但我不知道如何声明/写/使用它。
欢迎任何帮助。谢谢你的时间。
答案 0 :(得分:1)
您可以使用Match evaluator并使用Int32.Parse
将数字解析为可以添加9的int值:
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"
请注意,我使用的是逐字字符串文字,以便使用单个反斜杠来转义特殊字符并定义速记字符类(但是,在逐字字符串文字中,双引号必须加倍才能表示单个文字双引号)
答案 1 :(得分:1)
MatchEvaluator
是delegate。您需要编写一个带Match
的函数并返回替换值。一种方法如下所示:
private static string AddEvaluator(Match match)
{
int newValue = Int32.Parse(match.Groups[2].Value) + 9;
return String.Format("prop:{0}txt{1}{0}", match.Groups[1].Value, newValue)
}
public static void Main()
{
string path = @"C:/text.txt";
string content = File.ReadAllText(path);
File.WriteAllText(path, Regex.Replace(content, "prop:(['\"])txt(\\d+)\\1", AddEvaluator));
}