Biểu thức chính quy: tìm dấu cách (tab / dấu cách) nhưng không tìm dòng mới


96

Làm cách nào để có một biểu thức chính quy kiểm tra dấu cách hoặc tab nhưng không kiểm tra dòng mới. Tôi đã thử \snhưng phát hiện ra rằng nó cũng kiểm tra các dòng mới.

Tôi sử dụng C # / WPF nhưng nó không thành vấn đề.

Câu trả lời:


189

Sử dụng các lớp nhân vật: [ \t]


1
Giải quyết vấn đề của tôi. Xem thêm stackoverflow.com/a/25956935/292060 để biết \hlớ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.
goodeye

3
tại sao phải có một khoảng trống trước \t?
Ooker

4
@Ooker Để chụp một không gian đen
codemonkee

Điều này sẽ không khớp với các loại dấu cách khác, như các câu trả lời khác đã đề cập.
Gus

1
Tại sao lại có khoảng trắng trước \ t?
Catbuilts

35

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.


14

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]]

3

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 \scho 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ả \u3000bằ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 \hviế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, \hcá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.


1
Điểm tốt. Java \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).
Alan Moore

0

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","");

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.