2016-03-01 24 views
5

Tôi đã cố gắng thay thế những gì tôi nghĩ là một dấu gạch ngang tiêu chuẩn bằng cách sử dụng gsub. Mã Tôi đã kiểm tra là:R gsub với các ký tự đặc biệt

gsub("-", "ABC", "reported – estimate")

này không có gì, mặc dù. Tôi đã sao chép và dán dấu gạch ngang vào http://unicodelookup.com/#–/1 và nó có vẻ là một dấu gạch ngang. Trang web đó cung cấp mã hex, dec, vv cho một dấu gạch ngang và tôi đã cố gắng thay thế dấu gạch ngang vi nhưng không có may mắn. Gợi ý?

(Là phần thưởng, nếu bạn có thể cho tôi biết nếu có chức năng xác định các ký tự đặc biệt hữu ích).

Tôi không chắc liệu định dạng mã của SO sẽ thay đổi định dạng dấu gạch ngang sao cho đây là dấu gạch ngang tôi đang sử dụng (-).

Trả lời

4

Bạn có thể thay thế dấu gạch ngang bằng cách chỉ định nó bằng mẫu regex.

gsub("–", "ABC", "reported – estimate") 

Bạn có thể phù hợp với tất cả các dấu gạch nối, en- và em-dấu gạch ngang với

gsub("[-–—]", "ABC", "reported – estimate — more - text") 

Xem IDEONE demo

Để kiểm tra xem có những ký tự khác ASCII trong một chuỗi, sử dụng

> s = "plus ça change, plus c'est la même chose" 
> gsub("[[:ascii:]]+", "", s, perl=T) 
[1] "çê" 

Xem this IDEONE demo

Bạn sẽ nhận được kết quả trống (nếu chuỗi chỉ bao gồm ký tự "từ" và khoảng trống) hoặc - như ở đây - một số ký tự "đặc biệt".

+0

Điều này thật tuyệt. Có lẽ tôi đã không sử dụng thuật ngữ đúng với "ký tự đặc biệt". Ý tôi là, đây là các ký tự không phải là tiêu chuẩn UTF-8. Ví dụ, ô - đây là những ký tự mà tôi thấy trông kỳ lạ khi xuất bằng cách sử dụng readr :: write_csv(). Bạn có thể thay đổi gsub để xác định "ô" là "ký tự đặc biệt" hay không. – ZRoss

+1

Bạn có thể sử dụng nó với một regex để phù hợp với tất cả ascii: 'gsub (" [[: ascii:]] + "," ", s)'. Điều này sẽ loại bỏ tất cả ascii khỏi một chuỗi giữ tất cả các ký tự Unicode trong kết quả. –

+0

Bạn chỉ cần sử dụng 'perl = T' với mẫu regex ở trên vì đây là cấu trúc PCRE. –

2

để thay thế ký tự đặc biệt, bạn có thể thực hiện việc bổ sung âm.

gsub('[^\\w]*', 'ABC', 'reported - estimate', perl = True) sẽ thay thế tất cả các ký tự đặc biệt bằng ABC. [^ \ W] là một mẫu cho biết bất kỳ thứ gì không phải là một nhân vật bình thường.

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