2016-11-12 11 views
8

tôi sẽ đánh giá cao sự giúp đỡ của bạn về điều này, vì tôi không biết phạm vi nào để sử dụng, hoặc nếu có một lớp nhân vật như [[: cntrl:]] mà tôi đã tìm thấy trong ruby?C# regex để loại bỏ các ký tự không in được, và kiểm soát các ký tự, trong một văn bản có nhiều ngôn ngữ khác nhau, các chữ unicode

bằng phương tiện không in được, tôi có nghĩa là xóa tất cả các ký tự không được hiển thị trong đầu ra tức là, khi một in chuỗi đầu vào. Xin lưu ý, tôi tìm kiếm aC# regex, tôi không có một vấn đề với mã của tôi

+0

Nhân vật nào được cho là không thể in được? Bạn cần phải xây dựng lớp nhân vật regex cho điều đó. Có lẽ, bạn chỉ muốn '\ p {C}' (= * các ký tự điều khiển ẩn và các điểm mã không sử dụng *), hoặc '\ p {Cc}' (chỉ cần kiểm soát các ký tự, xem http://www.regular-expressions.info /posixbrackets.html). –

+0

Vui lòng xem xét chấp nhận câu trả lời phù hợp nhất với bạn. –

Trả lời

1

Bạn có thể thử với:

string s = "Täkörgåsmrgås"; 
s = Regex.Replace(s, @"[^\u0000-\u007F]+", string.Empty); 


câu trả lời Cập nhật sau khi nhận xét:

Tài liệu về ký tự không in được: https://en.wikipedia.org/wiki/Control_character

Char.IsControl Phương thức:

https://msdn.microsoft.com/en-us/library/system.char.iscontrol.aspx

lẽ bạn có thể thử:

string input; // this is your input string 
string output = new string(input.Where(c => !char.IsControl(c)).ToArray()); 
+0

cảm ơn bạn rất nhiều, tôi sẽ cố gắng này, tôi chỉ cần regex, tôi có mã, nỗi sợ hãi của tôi đã không để mất bất kỳ ký tự in trong cách :) – foksoho

+0

Tôi nghĩ rằng bạn sẽ, đầu ra là: "Tkrgsmrgs", bạn có thể đưa ra một ví dụ về những nhân vật bạn muốn xóa không? – Yanga

+0

thì đây không phải là những gì tôi muốn, đây là những gì tôi đã sợ, mất nhân vật từ màn hình. Mục tiêu của tôi là xóa các ký tự, không được hiển thị trên màn hình, nhưng chúng tồn tại trong đó, và vô dụng, để cho bạn một ví dụ, trong JAVA tôi có thể giữ tất cả các ký tự đó bằng \ p {Print} – foksoho

11

Bạn có thể loại bỏ tất cả các điều khiển và ký tự không thể in được khác với

s = Regex.Replace(s, @"\p{C}+", string.Empty); 

Các \p{C} loại Unicode lớp phù hợp với tất cả các ký tự điều khiển, ngay cả những người bên ngoài bảng ASCII vì trong .NET, các lớp thể loại Unicode được nhận biết theo mặc định.

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