2010-09-16 46 views
12

Bất kỳ ý tưởng nào?Cố gắng thay thế tất cả không gian màu trắng bằng một không gian đơn

Chương trình của tôi là tiện ích xác thực tệp và tôi phải đọc trong tệp định dạng rồi phân tích từng dòng theo một dấu cách. Nhưng rõ ràng, người đã viết tệp định dạng có thể sử dụng các tab hoặc 2 khoảng trắng hoặc bất kỳ hình thức khoảng trắng nào và tôi đang tìm một số mã để thực hiện điều đó. Tôi đã thử điều này:

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

Tôi cho rằng điều này là sai.
Trợ giúp!

+0

Nếu bạn đang đi để làm rất nhiều này lần bạn có thể muốn để lưu trữ các cấu trúc đối tượng Regex trước. Một độc lập tĩnh đọc sẽ làm. Sau đó, bạn tránh việc tạo ra các động cơ regex mỗi khi bạn sẽ thay thế một dòng. – Skurmedel

+0

@Skurmedel: Hoặc chỉ sử dụng phương thức 'Regex.Replace' tĩnh dựng sẵn. – LukeH

+0

@ LukeH: Tôi nghĩ bạn đã bỏ lỡ quan điểm của tôi. Có một lý do tại sao bạn có thể xây dựng trước các đối tượng regex, và không chỉ để dễ dàng sử dụng lại. Xem tại đây http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.aspx "Phương pháp tĩnh so với sơ thẩm". Cấp, nếu anh ta/cô ấy không sử dụng 15 regexes khác nhau trong ứng dụng của mình có lẽ không có vấn đề. Nhưng tôi không biết ứng dụng của anh ta/cô ấy. Đó là lý do tại sao tôi nói "có thể". – Skurmedel

Trả lời

33

Bạn có thể làm điều này -

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

nơi str là chuỗi của bạn.

+0

Tôi thực sự muốn chấp nhận điều này như câu trả lời của tôi nhưng nó dường như không hoạt động. Nó chỉ tiếp tục ném một ngoại lệ. Ngoài ra, chỉ là một câu hỏi chung; liên quan đến Regex, không '\ s' chỉ có nghĩa là khoảng trắng? –

+0

@New Start - Bạn có thể cho tôi biết lỗi này là gì không? Tôi hy vọng bạn đang sử dụng đúng không gian tên đúng không? –

+0

@New Start - '\ s' khớp với ký tự khoảng trắng. kiểm tra điều này - http://www.regular-expressions.info/charclass.html#shorthand –

-1

Đây là một bản sao của this question

tuy nhiên câu trả lời là đây (tín dụng để Daok)

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

Điều này không quan tâm đến các tab. – Timwi

+0

Suy nghĩ của tôi chính xác. Tôi đã thực sự đọc câu hỏi đó nhưng nó thực sự không giúp được tình hình cụ thể của tôi! –

+1

Điểm chụp ... nên dạy tôi đọc kỹ câu hỏi, tôi đọc "nhiều dấu cách" thay vì "khoảng trắng" bao gồm các tab v.v. Lời xin lỗi – 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, " "); 
Các vấn đề liên quan