2013-04-29 23 views
5

Tôi muốn chia chuỗi thành nhiều đoạn tại các vị trí có một hoặc nhiều khoảng trắng (tab, dấu cách, ...) xuất hiện. In the documentation of strsplit() nó nói, phân chia đó được hiểu là một biểu thức chính quy.Tách chuỗi thành các đoạn trên một hoặc nhiều khoảng trắng

Vì vậy tôi đã cố gắng điều sau đây, mà không làm việc:

test = "123 nnn  dddddd" 
strsplit(test, "[:space:]+") 

nó chỉ trả về:

[[1]] 
[1] "123 nnn  dddddd" 

nhưng phải trả lại:

[[1]] 
[1] "123" "nnn" "dddddd" 

Whats sai trong mã của tôi?

+1

Hãy thử thay vào đó: 'strsplit (test," [] + ")' –

+0

thực sự 'strsplit (test," + ")' cũng hoạt động. – plannapus

Trả lời

9

Hãy thử

strsplit(test, '\\s+') 
[[1]] 
[1] "123" "nnn" "dddddd" 

\\s sẽ phù hợp với tất cả các ký tự khoảng trắng.

+0

Tôi ước gì tôi đã đặt nhận xét của tôi làm câu trả lời ngay bây giờ !! :) –

7

[:space:] phải được đặt bên trong lớp nhân vật [] để hoạt động, ví dụ: [[:space:]]. [:space:] riêng của nó sẽ được hiểu là một lớp nhân vật gồm :, s, p, a, c, e.

strsplit(test, "[[:space:]]+") 

Lưu ý rằng theo mặc định strsplit sẽ sử dụng POSIX ERE, mà kết quả trong miền địa phương phụ thuộc giải thích [:space:].

Trong PCRE (Biểu thức chính quy tương thích Perl), [:space:]độc lập miền địa phương và tương đương với \p{Xps}. Do đó, bạn có thể muốn bật cờ perl nếu bạn muốn hành vi nhất quán trên các ngôn ngữ khác nhau.

Nếu bạn chỉ muốn sụp đổ tất cả các không gian (ASCII 32) và muốn để lại các tab ngang \t và ký tự dòng mới \n một mình, hoặc bạn có thể giả định rằng các văn bản chỉ chứa không gian (ASCII 32) như nhân vật khoảng cách:

strsplit(test, " +") 
+0

ví dụ tuyệt vời về câu trả lời rõ ràng –

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