重叠替换正则表达式?

时间:2016-07-02 17:25:54

标签: c# regex replace

我有一个字符串

  

工作1工作2工作3工作4工作5

我想获得

  

工作1工作21工作321工作4321工作54321

我使用此命令但不能正常工作

    (?<=work\s(\d)+.)(work)(\s\d+)
    $2$3$1

问题在于它不会记录第一次出现后替换的信息,并且可以在每次出现后保存更改。

当我应用命令时,我得到了

  

工作1工作21工作32工作43工作54

2 个答案:

答案 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);