我有一个字符串
工作1工作2工作3工作4工作5
我想获得
工作1工作21工作321工作4321工作54321
我使用这个命令但是不工作
(?<=works(d)+.)(work)(sd+)
$2$3$1
问题是它不记录第一次发生后替换的信息,而可以在每次发生后保存更改。
当我应用命令时,我得到
work 1 work 21 work 32 work 43 work 54
您实际上不需要重叠的正则表达式匹配,您需要能够匹配每个work
+空格+数字并保存数字值以便在每次迭代时更新。
regex被简化为仅work (?<num>d+)
(匹配work
,一个空格并捕获一个或多个数字到"num"组)。
在Regex.Replace
方法中使用回调方法:
using System;
using System.IO;
using System.Text.RegularExpressions;
using System.Linq;
public class Test
{
public static string num = string.Empty;
public static void Main()
{
var s = "work 1 work 2 work 3 work 4 work 5";
Console.WriteLine(Regex.Replace(s, @"work (?<num>d+)", Repl));
}
public static string Repl(Match m)
{
num = m.Groups["num"].Value + num;
return string.Format("work {0}", num);
}
}
参见c#演示
您可以尝试Regex.Replace
而聚合匹配:
String source = "work 1 work 2 work 3 work 4 work 5";
String aggregate = "";
// work 1 work 21 work 321 work 4321 work 54321
String result = Regex.Replace(source, @"d+", // or @"(?<=works)d+" pattern
match => aggregate = match.Value + aggregate);