2016-03-01 3 views
5

Stavo tentando di sostituire quello che pensavo fosse un trattino standard utilizzando gsub. Il codice Ero test è stato:R gsub con caratteri speciali

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

Questo non fa nulla, però. Ho copiato e incollato il trattino in http://unicodelookup.com/#–/1 e sembra essere un trattino. Quel sito fornisce i codici esadecimale, dec etc per un trattino e sto provando a sostituire il trattino, ma non ho fortuna. Suggerimenti?

(Come bonus, se puoi dirmi se esiste una funzione per identificare caratteri speciali che potrebbero essere utili).

Non sono sicuro che la formattazione del codice SO cambierà il formato del trattino, quindi ecco il trattino che sto usando (-).

risposta

4

È possibile sostituire il trattino semplicemente specificandolo nel modello regex.

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

È possibile abbinare tutti i trattini, en- e lineette con

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

Vedi IDEONE demo

Per controllare se ci sono caratteri non-ASCII in una stringa, utilizzare

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

Vedi this IDEONE demo

Si otterrà un risultato vuoto (se una stringa consiste solo di caratteri "word" e spazi bianchi), o - come qui - alcuni caratteri "speciali".

+0

Questo è fantastico. Forse non stavo usando la terminologia giusta con "caratteri speciali". Ciò che intendevo per questo sono caratteri che non sono UTF-8 standard. Ad esempio, ô - questi sono i caratteri che trovo strano quando esporti usando readr :: write_csv(). Può il gsub che hai dato essere modificato per identificare il "ô" come un "personaggio speciale". – ZRoss

+1

Puoi usarlo con un'espressione regolare per abbinare tutti gli ascii: 'gsub (" [[: ascii:]] + "," ", s)'. Ciò rimuoverà tutto ascii da una stringa mantenendo tutti i caratteri Unicode nel risultato. –

+0

Devi solo usare 'perl = T' con il pattern regex precedente poiché questo è un costrutto PCRE. –

2

per la sostituzione di caratteri speciali è possibile eseguire un complemento negativo.

gsub('[^\\w]*', 'ABC', 'reported - estimate', perl = True) sostituirà tutti i caratteri speciali con ABC. [^ \ W] è un pattern che dice tutto ciò che non è un personaggio normale.