2010-08-27 29 views

Trả lời

96

lớp Sử dụng ký tự: [ \t]

+1

điểm trên cho vấn đề của tôi. Xem thêm http://stackoverflow.com/a/25956935/292060 cho một lớp ký tự '\ h' chỉ có perl, nhưng nó hiển thị có nhiều ký tự khoảng trắng khác, trong trường hợp bạn cần phải thêm chúng vào danh sách ở đây. – goodeye

+0

tại sao phải có một dấu cách trước '\ t'? – Ooker

+0

@Ooker Để chụp một không gian theo nghĩa đen – codemonkee

20

Hãy thử bộ ký tự này:

[ \t] 

này chỉ phù hợp với một không gian hoặc một bộ phận của máy đánh chữ.

3

Lưu ý: Đối với những người làm việc với văn bản CJK (Trung Quốc, Nhật Bản, và Hàn Quốc), không gian hai byte (Unicode \u3000) là không trong \s cho bất kỳ thực tôi đã cố gắng cho đến nay (Perl , .NET, PCRE, Python). Trước tiên, bạn cần chuẩn hóa chuỗi của mình (chẳng hạn như bằng cách thay thế tất cả \u3000 bằng \u0020) hoặc bạn sẽ phải sử dụng bộ ký tự bao gồm điểm mã này ngoài bất kỳ khoảng trống nào khác mà bạn đang nhắm mục tiêu, chẳng hạn như [ \t\u3000].

Nếu bạn đang sử dụng Perl hoặc PCRE, bạn có tùy chọn sử dụng các \h viết tắt cho khoảng trắng ngang, mà dường như bao gồm không gian byte đơn, không gian hai byte, và tab, trong số những người khác. Xem chủ đề Match whitespace but not newlines (Perl) để biết thêm chi tiết.

Tuy nhiên, viết tắt \h này chưa được triển khai cho .NET và C#, tốt nhất tôi có thể nói.

+1

Điểm tốt. Java \ '\ h' (được giới thiệu trong Java 8) không bao gồm '\ u3000', nhưng' \ s' thì không, trừ khi bạn đặt chế độ UNICODE_CHARACTER_CLASS (được giới thiệu trong Java 7). –

10

Như @ Eiríkr Útlendi đã lưu ý, giải pháp được chấp nhận chỉ xem xét hai ký tự trắng: tab ngang (U + 0009) và khoảng cách ngắt (U + 0020). Nó không xem xét các ký tự khoảng trống khác, chẳng hạn như các khoảng trống không phá vỡ (mà xảy ra trong văn bản mà tôi đang cố giải quyết). Danh sách ký tự khoảng trống đầy đủ hơn được bao gồm trên Wikipedia và cũng được tham chiếu trong số linked Perl answer. Một giải pháp # C đơn giản mà chiếm những nhân vật khác có thể được xây dựng sử dụng character class subtraction

[\s-[\r\n]] 

hay, trong đó có giải pháp Eiríkr Útlendi, bạn có được

[\s\u3000-[\r\n]] 
Các vấn đề liên quan