C# 重叠替换正则表达式?

C# 重叠替换正则表达式?,c#,regex,replace,C#,Regex,Replace,我有一根绳子 工作1工作2工作3工作4工作5 我想获得 工作1工作21工作321工作4321工作54321 我使用此命令但不工作 (?<=work\s(\d)+.)(work)(\s\d+) $2$3$1 (?您实际上不需要重叠的正则表达式匹配,您需要能够匹配每个工作+空格+数字,并保存数字值以在每次迭代时更新 正则表达式被简化为一个简单的(匹配工作,一个空格,并将一个或多个数字捕获到“num”组中) 在正则表达式中使用回调方法。替换方法: using System; u

我有一根绳子

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

我想获得

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

我使用此命令但不工作

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

(?您实际上不需要重叠的正则表达式匹配,您需要能够匹配每个
工作
+空格+数字,并保存数字值以在每次迭代时更新

正则表达式被简化为一个简单的(匹配
工作
,一个空格,并将一个或多个数字捕获到“num”组中)

正则表达式中使用回调方法。替换
方法:

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);
    }
}
使用系统;
使用System.IO;
使用System.Text.RegularExpressions;
使用System.Linq;
公开课考试
{
公共静态字符串num=string.Empty;
公共静态void Main()
{
var s=“工作1工作2工作3工作4工作5”;
控制台写入线(Regex.Replace(s,@“work(?\d+),Repl));
}
公共静态字符串Repl(匹配m)
{
num=m.Groups[“num”].Value+num;
返回string.Format(“工作{0}”,num);
}
}

查看

您可以在聚合匹配项时尝试
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);
String source=“工作1工作2工作3工作4工作5”;
字符串聚合=”;
//工作1工作21工作321工作4321工作54321

String result=Regex.Replace(source,@“\d+”,//或@“(?您的编程语言是什么?Regex c#,我使用sharpdeveloper)如果“work+位数”的数目为“组是可变的。问题是它不会记录第一次出现后替换的信息,并且可以在每次出现后保存更改。Dmitry和sln使用聚合和匿名方法建议相同的解决方案。想法是一样的:使用委托更新num变量。@zero625:所有答案。”(
sln
Wiktor Stribiżew
)利用了相同的思想:正则表达式+聚合;但是,实现略有不同(当我在
中执行look Back时,答案使用组)(?就正则表达式的性能而言,未编排的lookback有点昂贵,这就是为什么如果我可以使用捕获组,我总是宁愿远离它们。此外,匹配一个或零个数字的
\d+
正则表达式将匹配任何数字序列,而不仅仅是在“工作”之后“06625:BTW,如果答案被证明是有用的,请永远考虑它的投票。