2013-02-06 15 views
6

Tôi làm cách nào để có thể xóa nhiều không gian và dấu cách bằng cách sử dụng chỉ 1 gsub? Tôi đã thực hiện chức năng này trim <- function(x) gsub(' {2,}',' ',gsub('^ *| *$','',x)), nhưng tôi đang cố gắng viết lại nó chỉ với 1 gsub.Xóa nhiều không gian và dấu cách bằng cách sử dụng gsub

Thực ra, tôi muốn nghiêng về cách đối sánh với nội dung nào đó dựa trên nội dung sau/trước nó bằng gsub. Trong ví dụ này tôi cần phải phù hợp với tất cả các không gian được preceeded bởi một không gian duy nhất, và thay thế chúng bằng cách ''

+1

Bạn có thể thuật lại và làm rõ câu lệnh cuối cùng của bạn về khớp với tất cả các dấu cách đứng trước một dấu cách không? Bạn có muốn giảm số lượng không gian xuống một không gian đơn lẻ không? – Dinre

+0

@Dinre, vâng, tôi muốn giảm tất cả không gian vào một đĩa đơn. Như bạn có thể thấy, gsub đầu tiên() (bên ngoài) làm chính xác điều này, nhưng tôi chỉ muốn sử dụng 1 gsub(), và đó là lý do tại sao tôi đã hỏi cách xóa tất cả dấu cách trước một khoảng trắng khác (để sử dụng cùng gsub() được sử dụng để xóa dấu cách) – Rcoster

Trả lời

13

Sử dụng một lookbehind tích cực để xem nếu không gian hiện tại được trước bởi một không gian:

^ *|(?<=) | *$ 

Xem nó ở đây trong hành động: http://regex101.com/r/bJ1mU0

+1

+1! Lưu ý trong R chúng ta cần 'perl = T' với regex như vậy. – agstudy

+0

Cảm ơn Joseph và agstudy! – Rcoster

+8

Để hoàn thành (chỉnh sửa câu trả lời của tôi bị từ chối), đây là chức năng đầy đủ: 'cắt <- hàm (x) trả về (gsub ("^* | (? <=) | * $ "," ", X, perl = T)) ' –

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