Câu trả lời:
Sử dụng các lớp nhân vật: [ \t]
\t
?
Hãy thử bộ ký tự này:
[ \t]
Điều này chỉ phù hợp với một khoảng trắng hoặc một trình lập bảng.
Như @ Eiríkr Útlendi đã lưu ý, giải pháp được chấp nhận chỉ xem xét hai ký tự khoảng trắng: tab ngang (U + 0009) và dấu cách ngắt (U + 0020). Nó không coi các ký tự khoảng trắng khác như khoảng trắng không ngắt (tình cờ có trong văn bản mà tôi đang cố gắng xử lý). Danh sách ký tự khoảng trắng đầy đủ hơn được đưa vào Wikipedia và cũng được tham chiếu trong câu trả lời Perl được liên kết . Có thể xây dựng một giải pháp C # đơn giản cho các ký tự khác này bằng phép trừ lớp ký tự
[\s-[\r\n]]
hoặc, bao gồm cả giải pháp của Eiríkr Útlendi, bạn sẽ nhận được
[\s\u3000-[\r\n]]
Lưu ý: Đối với những người xử lý văn bản CJK (Trung Quốc, Nhật Bản và Hàn Quốc), không gian byte kép (Unicode \u3000
) không được bao gồm \s
cho bất kỳ triển khai nào mà tôi đã thử cho đến nay (Perl, .NET, PCRE, Python). Trước tiên, bạn sẽ cần chuẩn hóa các 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 một 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ách \h
viết tắt cho khoảng trắng ngang , dường như bao gồm khoảng trắng byte đơn, khoảng trắng byte kép và tab, trong số những thứ khác. Xem chuỗi Đối sánh khoảng trắng chứ không phải dòng mới (Perl) để biết thêm chi tiết.
Tuy nhiên, \h
cách viết tắt này chưa được triển khai cho .NET và C #, vì điều tốt nhất tôi có thể nói.
\h
(được giới thiệu trong Java 8) có bao gồm \u3000
, nhưng không bao gồm \s
, trừ khi bạn đặt chế độ UNICODE_CHARACTER_CLASS (được giới thiệu trong Java 7).
Nếu bạn muốn thay thế khoảng trống bên dưới mã đã làm việc cho tôi trongC#
Regex.Replace(Line,"\\\s","");
Đối với tab
Regex.Replace(Line,"\\\s\\\s","");
\h
lớp ký tự chỉ có perl , nhưng nó cho thấy có nhiều ký tự khoảng trắng khác, trong trường hợp bạn cần thêm chúng vào danh sách tại đây.