2014-09-09 6 views
1

Я хотел бы использовать регулярное выражение вместо string.replace(), чтобы получить первые 6 символов строки и последние 4 символа одной и той же строки и заменить ее на другой знак: & например. Строка всегда содержит 16 символов. Я делаю некоторые исследования, но я никогда раньше не работал с регулярным выражением. СпасибоRegex, чтобы получить первые 6 и последние 4 символа строки

+11

Любые причины, по которым вы не просто хотите использовать подстроку? –

+4

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

+2

, пример будет лучше. –

ответ

7

Если вы предпочитаете использовать регулярное выражение, вы можете использовать следующее. Точка . будет соответствовать любому символу, кроме последовательности новой строки, поэтому вы можете указать {n}, чтобы точно соответствовать n раз и использовать начало/конец привязок строк.

String r = Regex.Replace("123456foobar7890", @"^.{6}|.{4}$", 
       m => new string('&', m.ToString().Length)); 

Console.WriteLine(r); //=> "&&&&&&foobar&&&&" 

Если вы хотите инвертировать логика, заменяя среднюю часть вашей строки вы можете использовать Positive Lookbehind.

String r = Regex.Replace("123456foobar7890", @"(?<=^.{6}).{6}", 
       m => new string('&', m.ToString().Length)); 

Console.WriteLine(r); //=> "123456&&&&&&7890" 
+1

Не могли бы вы использовать это для "123456foobar7890" -> "&&&&&& foobar &&&&"? Я думаю, что OP хочет показать, что есть 16 символов, но скрыть некоторые из них. –

+1

Aha! Нашел его: 'Regex re = new Regex (@" ^. {6} |. {4} $ "); Строка r = re.Replace ("123456foobar7890", m => новая строка ('&', m.ToString(). Length)); '- может быть более компактный способ сделать это на C# позже, чем у меня есть (3.5). –

+0

@hwnd Спасибо, получил вашу мысль, но если я хочу инвертировать логику, например, показать 6 первых символов, заменить «foobar» как & и показать последние 4 символа снова? – gog

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