2015-07-10 3 views
1

Я хотел бы написать выражение регулярного выражения, которое будет искать этот шаблон: asdf=123, а затем, когда что-то найдено в файле/строке, оно должно просто заменить часть 123 на bbbcccddd.Regex найти по шаблону и заменить только часть

Как это сделать на C#?

+3

Возможно, эта ссылка поможет? : https://msdn.microsoft.com/en-us/library/xwewhkd1(v=vs.110).aspx –

+0

Более подробная информация. Что после/до «asdf = 123» в вашей строке/файле? Если это что-то вроде «asdasd____ asdf = 123 _____ asdasd», это одно, но если это «zzzzzzasdf = 12309656097» - это нечто другое. Было бы неплохо, если бы вы предоставили сокращенный пример этой строки. Значения фиксированы? Или это всего лишь пример шаблона, который вы ищете? – Fabjan

ответ

1
Console.WriteLine(Regex.Replace("11asdf=123 ttt", @"(?<=asdf=)123", "321")); 

Хотя я пишу этот код, но я думаю, что будет много проблем, потому что вы не опишете вашу проблему ясно, как если бы какой-то характер не белый до asdf, или есть какой-то номер после 123, вы все еще хотите заменить 123?

0

Вы могли бы сделать что-то вроде этого:

string pattern = "asdf=123"; 
Regex r = new Regex(@"(.*?=)(.*)"); 
Match m = r.Match(pattern); 
if(m.Success)    
     Console.WriteLine(m.Groups[1].Value + new String(m.Groups[2].Value.Reverse().ToArray())); 

выше будет соответствовать что-нибудь, пока она не найдет равенства ((.*?=)) и помещает его в группе. Затем он будет соответствовать следующему и помещает его в другую группу ((.*)). Затем первая группа печатается как есть, пока содержимое второй группы отменяется.

Менее многословный, но менее гибкий способ сделать это было бы использовать Regex.Replace, с чем-то вроде так:

string pattern = "asdf=123"; 
    Console.WriteLine(Regex.Replace(pattern, @"(.*?=)(\d)(\d)(\d)", "$1$4$3$2")); 

Это менее прочное, хотя, так как вы должны были бы знать количество цифр, прежде чем руки.

EDIT: В соответствии с вашими редактирования:

Вам нужно будет использовать: Regex.Replace("asdf=123", "(.*?=)\d{3}","$1bbbcccddd")

+0

Мне не нужно меняться. Любая строка может быть там –

+1

@devhedgehog: я обновил свой ответ. Даже если ваше изменение полностью изменяет ваш вопрос. – npinti

+0

Часть '. *?' Пугает меня в большой и произвольной строке слов. '(\ S * =)' может быть лучше. –

1
string pattern = @"asdf=123"; 
var result = Regex.Replace(yourString, pattern, "asdf=bbbcccddd"); 
+0

Для такого подхода регулярное выражение избыточное, просто string.Replace будет достаточно https://msdn.microsoft.com/en-us/library/fk49wtc1(v=vs.110).aspx –

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