2010-10-19 48 views

Trả lời

29

Sử dụng Regex Trừ

[\p{P}-[._]] 

Đây là liên kết cho tài liệu .NET Regex (Tôi không chắc liệu các hương vị khác có hỗ trợ nó hay không) ... http://msdn.microsoft.com/en-us/library/ms994330.aspx

Dưới đây là một ví dụ C#

string pattern = @"[\p{P}\p{S}-[._]]"; // added \p{S} to get ^,~ and ` (among others) 
string test = @"_""'a:;%^&*~`[email protected]#.,?"; 
MatchCollection mx = Regex.Matches(test, pattern); 
foreach (Match m in mx) 
{ 
    Console.WriteLine("{0}: {1} {2}", m.Value, m.Index, m.Length); 
} 

Giải thích Các mô hình là một phép trừ lớp nhân vật. Nó bắt đầu với một lớp nhân vật tiêu chuẩn như [\ p {P}] và sau đó thêm một lớp nhân vật trừ như - [._] mà nói để loại bỏ. và _. Phép trừ được đặt bên trong [] sau ruột chuẩn.

+0

Điều đó dường như không khớp với ^, ~ hoặc '; tôi có thể kiểm tra nó sai hay không. NET không xem chúng là dấu chấm câu? – Smashery

+0

Nếu bạn thả - [._], thì \ p {P} không khớp với chúng. – Les

+0

Vì vậy, .NET không coi chúng là dấu chấm câu? – Smashery

1

Bạn có thể có thể sử dụng một lớp nhân vật phủ nhận như thế này:

[^0-9A-Za-z._\s] 

Điều này bao gồm tất cả các nhân vật trừ những liệt kê. Bạn có thể cần loại trừ nhiều ký tự hơn (chẳng hạn như các ký tự điều khiển), tùy thuộc vào các yêu cầu tối thượng của bạn.

+0

Điều đó cũng sẽ nhận được khoảng trống –

+0

Được rồi, thêm dấu cách vào danh sách loại trừ. –

+4

Được rồi, nhưng tôi muốn một nửa đại diện của bạn cho câu hỏi này ... –

8

Đây là điều đơn giản hơn một chút. Không phải từ hoặc khoảng trắng (trong đó các từ bao gồm A-Za-z0-9 AND gạch dưới).

[^\w\s.] 
+0

Hoạt động trong Ruby! – zanbri

12

Câu trả lời cho đến nay không tôn trọng TẤT CẢ dấu chấm câu. Điều này sẽ làm việc:

(?![\._])\p{P} 

(Giải thích: lookahead Negative để đảm bảo rằng không . cũng không _ được kết hợp, sau đó kết hợp bất kỳ ký tự unicode dấu chấm câu.)

+0

Điều đó dường như không khớp với ^, ~ hoặc '; tôi có thể kiểm tra nó sai hay không. NET không xem chúng là dấu chấm câu? – Smashery

+0

@Smashery Đây là dấu trọng âm, bạn sẽ không bao giờ sử dụng dấu chấm câu đó bằng ngôn ngữ tiếng Anh. – steinar

+0

Cảm ơn rất nhiều! Tôi quyết định chấp nhận câu trả lời của Les, bởi vì tôi thấy Regex Subtraction dễ hiểu hơn về mặt khái niệm; do đó tôi có nhiều khả năng nhớ nó hơn; nhưng 1 - cảm ơn vì đã dạy tôi vài điều mới mẻ!(Ước tôi có thể chấp nhận hai câu trả lời) – Smashery

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