2011-01-13 26 views
7

Làm thế nào để thay thế tanween bel Alf với Alf bình thườngẢ Rập Vấn đề Thay أ chỉ với ا

+1

Bất kỳ lý do nào muốn sử dụng regex cho điều này? –

+1

Bạn có thể muốn cung cấp một số thông tin ngữ cảnh bổ sung như cách bạn lưu trữ chuỗi, v.v. –

Trả lời

1

Nhờ Bolo của enlightment sau một vài phút tìm kiếm tôi đã làm nó như thế:

string s = ""; 
     foreach (Char c in x) 
     { 
      if (((int)c).ToString("x").ToLower() != "64b") 
       s += c.ToString(); 

     } 

trong đó x là chuỗi của tôi

Giống như là tôi loại trừ ARABIC FATHATAN từ chuỗi

4

Tôi không biết C#, nhưng đó là câu hỏi của UNICODE. Tôi sẽ làm điều đó bằng phương tiện của UNICODE normalization, sử dụng this function.

Đầu tiên, chuẩn hóa thành biểu mẫu bị phân tách. Tiếp theo, lọc ra tất cả các ký tự từ danh mục "Đánh dấu, Không tìm kiếm" [Mn]. Cuối cùng, bình thường trở lại dạng sáng tác.

Nếu tôi thấy một cách chính xác, hình tượng của bạn được thể hiện trong UNICODE bởi ARABIC LETTER ALEF WITH HAMZA ABOVE (U+0623, [Lo]) tiếp theo là ARABIC FATHATAN (U+064B, [Mn]). Ký tự đầu tiên phân hủy thành ARABIC LETTER ALEF (U+0627, [Lo]) + ARABIC HAMZA ABOVE (U+0654, [Mn]).

Đây là chuỗi các biến đổi (mũi tên đầu tiên cho thấy một phân hủy, thứ hai - lọc ra Không giãn cách nhãn hiệu, thứ ba - một thành phần):

U+0623 + U+064B → U+0627 + U+0654 + U+064B → U+0627 → U+0627 

Sau khi phân hủy, loại bỏ tất cả các nhân vật từ [Mn] danh mục và soạn lại, bạn chỉ còn lại ARABIC LETTER ALEF.

+0

Tôi sử dụng phương pháp này để xóa dấu phụ khỏi các văn bản được viết bằng bảng chữ cái Latinh. Tiếp theo, tôi cần xử lý một vài ngoại lệ, như 'Ł', nhưng phương pháp được mô tả bao gồm hầu hết các trường hợp. – Bolo

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