2016-05-30 2 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

Используйте функцию обратного вызова или лямбда для построения шаблона замены на основе данных, захваченных с помощью регулярных выражений:

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. –

Смежные вопросы