我有一个字符串
工作1工作2工作3工作4工作5
我想获得
工作1工作21工作321工作4321工作54321
我使用此命令但不能正常工作
(?<=work\s(\d)+.)(work)(\s\d+)
$2$3$1
问题在于它不会记录第一次出现后替换的信息,并且可以在每次出现后保存更改。
当我应用命令时,我得到了
工作1工作21工作32工作43工作54
答案 0 :(得分:1)
您实际上不需要重叠正则表达式匹配,您需要能够匹配每个work
+空格+数字并保存数字值以在每次迭代时更新。
正则表达式简化为work (?<num>\d+)
(匹配work
,空格并将一个或多个数字捕获到&#34; num&#34;组中。
在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# demo
答案 1 :(得分:0)
您可以在汇总匹配时尝试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 @"(?<=work\s)\d+" pattern
match => aggregate = match.Value + aggregate);