Regex để khớp nhiều hơn 2 khoảng trắng nhưng không phải là dòng mới


87

Tôi muốn thay thế tất cả nhiều hơn 2 khoảng trắng trong một chuỗi nhưng không phải các dòng mới, tôi có regex này: \s{2,}nhưng nó cũng khớp với các dòng mới.

Làm cách nào để kết hợp 2 hoặc nhiều khoảng trắng chỉ với các dòng mới?

Tôi đang sử dụng c #


@nihcap - Trên thực tế, C # không có hương vị regex của riêng nó, nó là một phần của thư viện chung .Net. Trong trường hợp này, .Net và C # đều là các thẻ hữu ích.
Kobi

Câu trả lời:


159

Đặt các ký tự khoảng trắng mà bạn muốn khớp vào bên trong một lớp ký tự. Ví dụ:

[ \t]{2,}

khớp với 2 hoặc nhiều khoảng trắng hoặc tab.

Bạn cũng có thể làm:

[^\S\r\n]{2,}

đó phù hợp với bất kỳ màu trắng-không gian char trừ \r\nít nhất hai lần (lưu ý rằng thủ đô Strong \Slà chữ viết tắt [^\s]).


Bạn có nghĩa là gì khi "viết tắt của" trong câu cuối cùng của bạn? Toàn bộ biểu thức chính quy sẽ trông như thế nào nếu không có cách viết tắt này?
Lonnie Tốt nhất

5
@LonnieBest trong biểu thức chính quy, đối với các chuỗi thoát như \ w, thường có quy ước rằng chuỗi thoát viết hoa là tập ký tự nghịch đảo của chuỗi thoát viết thường. Ví dụ: \ d là nghịch đảo của \ D, \ s là nghịch đảo của \ S, \ w là nghịch đảo của \ W, v.v. Ngoài ra, trong một tập hợp lớp ký tự được phân cách bởi [] chẳng hạn như [abc], có thể chỉ định một nghịch đảo bằng cách sử dụng [^ abc]. Do đó, \ S tương đương với [^ \ s], cũng sẽ tương đương với ký hiệu không được phép [^^ \ S], nếu nó được cho phép. (^^ không phải là một cách hợp lệ của đại diện một nghịch đảo của một nghịch đảo.)
Dejay Clayton

@DejayClayton Cảm ơn, tôi không biết điều đó.
Lonnie Tốt nhất

Câu trả lời này đã hoạt động, nhưng tại sao các \s{2,}dòng mới lại tiếp tục nó? Nếu đó là \n\s{2,}tôi hiểu. Và tại sao việc nhập khoảng trắng trong ngoặc lại hoạt động?
bit-less

"Câu trả lời này hoạt động, nhưng tại sao \ s {2,} lấy dòng mới tiếp tục nó?" vì \skhớp với khoảng trắng, tab và ngắt dòng. "Và tại sao việc nhập một khoảng trắng trong dấu ngoặc lại hoạt động?", Ừm, bởi vì nó đúng. Không biết phải nói gì khác về điều đó :)
Bart Kiers

0

Regex để chỉ nhắm mục tiêu hai dấu cách: [] {2,} Dấu ngoặc trong regex là lớp ký tự. Có nghĩa là chỉ các ký tự trong đó. Đây chỉ là không gian. Dấu ngoặc nhọn sau có nghĩa là hai hoặc nhiều lần.

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.