2009-03-17 35 views
10

Cụm từ thông thường chỉ cho phép các chữ cái là "[a-zA-Z]" nhưng tôi đến từ Thụy Điển, vì vậy tôi sẽ phải đổi chữ đó thành "[a- zåäöA-ZÅÄÖ] ". Nhưng giả sử tôi không biết chữ cái nào được sử dụng trong bảng chữ cái.Cụm từ thông dụng để bắt các chữ cái vượt quá az

Có cách nào để tự động biết những ký tự nào hợp lệ ở ngôn ngữ/ngôn ngữ cụ thể hay tôi chỉ cần tạo danh sách đen ký tự mà tôi nghĩ tôi không muốn?

Trả lời

13

Bạn có thể sử dụng \ pL để khớp với bất kỳ 'thư' nào, sẽ hỗ trợ tất cả các chữ cái bằng tất cả ngôn ngữ. Bạn có thể thu hẹp nó xuống các ngôn ngữ cụ thể bằng cách sử dụng 'các khối được đặt tên'. Bạn có thể tìm thêm thông tin trên tài liệu Character Classes trên MSDN.

Đề xuất của tôi là đặt cụm từ thông dụng (hoặc ít nhất là "chữ cái") thành tài nguyên được bản địa hóa, sau đó bạn có thể kéo ra dựa trên ngôn ngữ và biểu mẫu hiện tại vào mẫu lớn hơn.

+4

Đối với những người không quá quen thuộc với regex (như tôi), mã đúng thực tế là: \ p {Ll} –

+0

Để khớp các chữ cái sử dụng '\ p {L}'. Để khớp các chữ cái với dấu phụ, sử dụng '(?> \ P {L} \ p {M} *)'. Để khớp các chữ in hoa, sử dụng '\ p {Lu}'. Để khớp các chữ thường - có - sử dụng '\ p {Ll}'. –

0

Tất cả ký tự là "hợp lệ", vì vậy tôi nghĩ bạn thực sự yêu cầu ký tự "thường được coi là chữ cái" trong ngôn ngữ.

Đặc tả Unicode có một số nguyên tắc, nhưng nói chung câu trả lời là "không", bạn sẽ cần phải liệt kê các ký tự mà bạn quyết định là "chữ cái".

+0

tôi đề nghị [: alpha:] ở một câu trả lời tôi đã xóa.Tôi không biết C#, vì vậy tôi có lẽ sai, nhưng các công cụ regex tôi quen thuộc với những thay đổi các chữ cái nó phù hợp dựa trên ngôn ngữ. –

+0

@Jon: .net không hỗ trợ [: name:] cho các lớp được đặt tên, nhưng có cú pháp thay thế cho cùng một mục đích. – Richard

+0

@ Jason: Bạn sẽ chỉ cần liệt kê nếu bạn định nghĩa chữ cái khác với Unicde và Phép trừ lớp ký tự không đủ, ví dụ: [\ p {L} - [\ p {IsBasicLatin}]] sẽ khớp với tất cả các chữ cái không phải ASCII. – Richard

3

Còn về \ p {name} thì sao?

Khớp bất kỳ ký tự nào trong lớp ký tự được chỉ định được chỉ định bởi {name}. Tên được hỗ trợ là các nhóm Unicode và dãy ô. Ví dụ: Ll, Nd, Z, IsGreek, IsBoxDrawing.

Tôi không biết đủ về unicode, nhưng có lẽ nhân vật của bạn phù hợp với một lớp unicode?

0

Có cách nào để tự động biết ký tự nào hợp lệ ở ngôn ngữ/ngôn ngữ cụ thể hay tôi chỉ cần tạo danh sách đen ký tự mà tôi nghĩ tôi không muốn?

Đây không phải là, nói chung, có thể.

Sau khi tất cả văn bản Engligh bao gồm một số ký tự có dấu (ví dụ: trong "fête" và "ngây thơ" - bằng tiếng Anh-Anh phải chính xác vẫn sử dụng dấu trọng âm). Ở một số ngôn ngữ, một số chữ cái tiêu chuẩn hiếm khi được sử dụng (ví dụ: y-diaeresis bằng tiếng Pháp).

Sau đó xem xét bao gồm cả các từ nước ngoài được bao gồm (điều này thường sẽ là trường hợp các thuật ngữ kỹ thuật được sử dụng). Báo giá sẽ là một nguồn khác.

Nếu yêu cầu của bạn được xác định đủ hẹp, bạn có thể tạo định nghĩa, nhưng điều này yêu cầu trải nghiệm ngôn ngữ bằng ngôn ngữ đó.

0

regex này cho phép chỉ là biểu tượng hợp lệ thông qua:

[a-zA-ZÀ-ÿ ] 
Các vấn đề liên quan