2016-05-30 20 views
3

我在下面的格式字符串,这就需要被变换为:重复的一组值的次数作为另一基团的值

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

http://stackoverflow.com/questions/411752/best-way-to-repeat-a-character-in-c-sharp这可能有帮助,因为你有所有其他必要的东西 – SilentMonk

回答

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位数。

+0

谢谢Wiktor!什么是回调的解决方案? – Pokemon

+1

它会非常相似,只会使用方法名称而不是lamda。 –

相关问题