我有以下格式的字符串,需要转换为:
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}
感谢任何帮助:)
答案 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位数。