C# 重叠替换正则表达式?
我有一根绳子 工作1工作2工作3工作4工作5 我想获得 工作1工作21工作321工作4321工作54321 我使用此命令但不工作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
(?<=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,如果答案被证明是有用的,请永远考虑它的投票。