重复组值的次数与另一个组的值重复次数

时间:2016-05-30 15:08:28

标签: c# regex

我有以下格式的字符串,需要转换为:

4ABC3D - > AAAABCDDD

ABCD2F - > ABCDFF

基本上,数字表示下一个字符应重复多少次。 我正在使用C#和regex.Replace()方法,但我不确定如何重复第1组捕获的字符,在第2组中捕获:

string inputString = "4ABC3D";
Regex regex = new Regex("([0-9]+)([A-Z])");
inputString = regex.Replace(inputString, "$1{$2}"); 
//returns 4{A}BC3{D}

感谢任何帮助:)

1 个答案:

答案 0 :(得分:2)

使用回调或lambda根据正则表达式捕获的数据构建替换模式:

var inputString = "4ABC3D";
var res = Regex.Replace(inputString, "([0-9]+)([A-Z])",
    x => String.Concat(Enumerable.Repeat(x.Groups[2].Value, Int32.Parse(x.Groups[1].Value)))
); // => AAAABCDDD

请参阅IDEONE demo

请注意,使用Int32.Parse是安全的,因为[0-9]+肯定会捕获至少1位数。