2010-09-16 3 views
12

Любые идеи?Попытка заменить все пробелы одним пространством

Моя программа - утилита проверки файлов, и я должен прочитать ее в формате, а затем проанализировать каждую строку на одном пробеле. Но, очевидно, человек, который написал файл формата, может использовать вкладки, или 2 пробела, или любую форму пробела, и я ищу какой-то код для этого. Я пробовал:

 public static string RemoveWhitespace(this string line) 
     { 
      try 
      { 
       return new Regex(@"\s*").Replace(line, " "); 
      } 
      catch (Exception) 
      { 
       return line; 
      } 
     } 

Я предполагаю, что это неправильно.
Помощь!

+0

Если вы собираетесь делать это много раз, вы можете захотеть, чтобы сохранить конструкцию объект Regex заранее. Частный статический readonly будет делать. Затем вы избегаете создания двигателя регулярного выражения каждый раз, когда вы собираетесь заменить строку. – Skurmedel

+0

@Skurmedel: Или просто используйте встроенный статический метод 'Regex.Replace'. – LukeH

+0

@ LukeH: Я думаю, вы пропустили мою мысль. Есть причина, по которой вы можете предустановить объекты регулярных выражений, а не только для удобства повторного использования. См. Здесь http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.aspx «Статические методы и методы экземпляра». Конечно, если он/она не использует 15 различных регулярных выражений в своем приложении, вероятно, нет проблем. Но я не знаю его/ее заявления. Вот почему я сказал «могу». – Skurmedel

ответ

33

Вы можете сделать это -

System.Text.RegularExpressions.Regex.Replace(str,@"\s+"," "); 

str, где находится ваша строка.

+0

Я действительно хочу принять это как свой ответ, но он просто не работает. Он просто бросает исключение. Также, общий вопрос; в отношении Regex, означает ли '\ s' просто пробел? –

+0

@New Start - Можете ли вы сказать мне, что такое ошибка? Надеюсь, вы правильно используете пространство имен? –

+0

@New Start - '\ s' соответствует символу пробела. проверьте это - http://www.regular-expressions.info/charclass.html#shorthand –

-1

Это дубликат this question

однако ответ это (кредит Daok)

Regex regex = new Regex(@"[ ]{2,}");  
tempo = regex.Replace(tempo, @" "); 
+1

Это не касается вкладок. – Timwi

+0

Моя мысль точно. Я действительно прочитал этот вопрос, но это действительно не помогло моей конкретной ситуации! –

+1

Точка, принятая ... должна научить меня более внимательно читать вопрос, я прочитал «несколько пробелов» вместо «белых», которые включают вкладки и т. Д.! извинения – Xander

0
input = input.Replace("\t", " "); 

List<string> empties = new List<string>(); 
for (int i=input.Length - 1; i>1; i--) 
{ 
    string spcs = ""; 
    for (int j=0; j<=i; j++) 
     spcs += " "; 
    if (input.Contains(spcs)) 
     empties.Add(spcs); 
} 

foreach (string s in empties) 
    input = input.Replace(s, " "); 
Смежные вопросы