2010-10-07 42 views
6

Tôi không có nhiều kinh nghiệm với RegEx vì vậy tôi đang sử dụng nhiều chuỗi String.Replace() cuộc gọi để loại bỏ các ký tự không mong muốn - có RegEx tôi có thể viết để sắp xếp này?Regex để thay thế các ký tự không hợp lệ

string messyText = GetText(); 
string cleanText = messyText.Trim() 
     .ToUpper() 
     .Replace(",", "") 
     .Replace(":", "") 
     .Replace(".", "") 
     .Replace(";", "") 
     .Replace("/", "") 
     .Replace("\\", "") 
     .Replace("\n", "") 
     .Replace("\t", "") 
     .Replace("\r", "") 
     .Replace(Environment.NewLine, "") 
     .Replace(" ", ""); 

Cảm ơn

+1

Thậm chí nếu nó không phải là quy ước mã hóa ưa thích của bạn, nếu bạn đặt mỗi '.Replace()' trên một dòng mới, nó sẽ giúp dễ đọc trên trang này để không có cuộn ngang lớn. – Dinah

Trả lời

13

Hãy thử regex này:

Regex regex = new Regex(@"[\s,:.;/\\]+"); 
string cleanText = regex.Replace(messyText, "").ToUpper(); 

\s là một lớp nhân vật tương đương với [ \t\r\n].


Nếu bạn chỉ muốn giữ ký tự chữ và số, thay vì thêm mỗi nhân vật phi tự chữ và số trong sự tồn tại đến lớp nhân vật, bạn có thể làm điều này:

Regex regex = new Regex(@"[\W_]+"); 
string cleanText = regex.Replace(messyText, "").ToUpper(); 

đâu \W là bất kỳ không lời ký tự (không phải [^a-zA-Z0-9_]).

+0

'\ s' cũng chứa' \ v' và '\ f', nhưng chúng không được sử dụng phổ biến, do đó, nó không phải là vấn đề. –

+0

bạn cần RegexOptions.Multiline hoặc regex của bạn sẽ xử lý nó? –

+0

@Preet Tôi tin rằng 'RegexOptions.Multiline' chỉ ảnh hưởng đến hành vi bắt đầu và kết thúc của chuỗi ký tự'^'và' $ ', nhưng tôi có thể sai. – 999999

2

Character classes để giải thoát!

string messyText = GetText(); 
string cleanText = Regex.Replace(messyText.Trim().ToUpper(), @"[,:.;/\\\n\t\r ]+", "") 
+0

Điều này không tương đương với mã trong câu hỏi. – quantumSoup

+0

@quantumSoup: Tôi nhớ gì? – kevingessner

+0

@kevingessner: sử dụng @ "..." hoặc \ t \ r \ n của bạn sẽ được chuyển sang miền địa phương của họ bằng .NET. Hoặc thoát khỏi chúng nhưng tôi nghĩ @ là dễ đọc hơn. – Dinah

0

Có thể bạn sẽ muốn sử dụng phương pháp tiếp cận danh sách cho phép, có một đại dương gồm các nhân vật hài hước có tác dụng phụ thuộc vào sự kết hợp có thể không dễ hình dung.

Một regex đơn giản mà loại bỏ tất cả mọi thứ nhưng ký tự được phép có thể trông như thế này:

messyText = Regex.Replace(messyText, @"[^a-zA-Z0-9\x7C\x2C\x2E_]", ""); 

Các^là có để đảo vùng chọn, ngoài các ký tự chữ và regex này cho phép | ,. và _ Bạn có thể thêm và xóa ký tự và bộ ký tự nếu cần.

Các vấn đề liên quan