2016-09-28 2 views
-2

Привет У меня есть строка, как следующийИнкрементальная символ замены с использованием регулярных выражений

Some text here - 
~XY*901*000000001~MLC*~XY*901*000000005~MLC*~XY*901*0000000010~MLC* 
Some text here 

Я хочу, чтобы он как -

Some text here 
~XY*901*000000001~MLC*~XY*901*000000002~MLC*~XY*901*000000003~MLC* 
Some text here 

Пояснение: все между ~XY*901* и ~MLC* должно быть увеличено на один запуск от 1.

Как достичь этого, используя Оценщик соответствия реджекса?

+0

Интересно, как вы увеличивать эти цифры, если у вас есть '5', который становится' 2' и '10', который становится' 3'. –

+0

@ WiktorStribiżew Мы можем использовать оценщиков соответствия C#. Просто я не могу понять это. –

+0

Downvoters, пожалуйста, оставьте комментарий для Downvotes. Это смешно, когда моя проблема четко заявлена, я не знаю, как объяснить это лучше, чем это –

ответ

1

Немного lambada. Эрм, я имею в виду лямбда.

var input = @"Some text here - 
~XY*901*000000001~MLC*~XY*901*000000005~MLC*~XY*901*0000000010~MLC* 
More text here"; 

var reg = new System.Text.RegularExpressions.Regex(@"(~XY\*901\*)[0-9]+(~MLC\*)"); 

int i = 1; 
var result = reg.Replace(input, m => m.Groups[1] + i++.ToString("D9") + m.Groups[2]); 

Console.WriteLine(result); 

Регулярное выражение Заменить петли через матчей регулярного выражения. Увеличивает целое число.

Выход:

Some text here - 
~XY*901*000000001~MLC*~XY*901*000000002~MLC*~XY*901*000000003~MLC* 
More text here 
+0

Вы рок-приятель, Когда я собирался опубликовать свой собственный ответ, просто получил ваше спасибо –

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