2012-12-20 3 views
3

Я видел это CheatSheet for Regex in C#Regex вместо функции string.replace

Однако я пытаюсь создать функцию регулярного выражения, которое может заменить это для меня:

while (fname.Contains("..")) 
{ 
    fname = fname.Replace("..", "."); 
} 
if (fname.StartsWith(".")) { 
    fname= fname.Remove(0, 1); 
} 
fname = fname.Replace("&", "_"); 
fname = fname.Replace("#", "_"); 
fname = fname.Replace("{", "_"); 
fname = fname.Replace("}", "_"); 
fname = fname.Replace("%", "_"); 
fname = fname.Replace("~", "_"); 
fname = fname.Replace("?", "_"); 

Я просто не получите, как написать регулярное выражение, которое исправит эту проблему для меня. Может ли кто-нибудь дать мне руку?

+3

Ну, что вы ожидаете, если вы размещаете преждевременно !? –

+0

@WillVousden Он был добавлен, когда я нажал кнопку ввода? Я обновлял его. Мне не показалось, что я обновляю его. – Rob

+0

Вы уверены, что 'fname.Replace (" .. ",". ");' Работает так, как вы ожидали? –

ответ

7
string dotsPattern = @"\.\.+"; //2 or more dots. 
fname=Regex.Replace(fname, dotsPattern ,"."); 
String firstSymbolDot = @"^\."; 
fname = Regex.Replace(fname, firstSymbolDot, String.Empty); 
string symbolPattern = "[&#{}%~?]"; //any of given symbol; 
string result = Regex.Replace(fname, symbolPattern, "_"); 
+0

Теперь вы не используете symbolPattern, но я знаю, что это должно быть за Replace (fname, symbolPattern, _ "); Спасибо :) – Rob

0

Почему вы зацикливаете на fname=fname.Replace("..", ".");, пытаетесь ли вы заменить все последовательности более одной точки только одной точкой?

Это:

fname=Regex.Replace(fname,@"\.+","."); 

Что касается остальных:

fname=Regex.Replace(
    Regex.Replace(
     fname, 
     @"&|\#|\{|\}|%|~|\?", 
     "_" 
    ), 
    @"^\.", 
    "" 
); 
Смежные вопросы