2013-02-06 19 views
6

Come posso rimuovere più spazi e spazi finali utilizzando solo 1 gsub? Ho già effettuato questa funzione trim <- function(x) gsub(' {2,}',' ',gsub('^ *| *$','',x)), ma sto provando a riscriverlo con solo 1 gsub.Rimozione di più spazi e spazi finali utilizzando gsub

In realtà, voglio snellire come abbinare qualcosa basato su ciò che è dopo/prima con gsub. In questo esempio, ho bisogno di corrispondere a tutti gli spazi che sono preceduto da un singolo spazio, e sostituirli con ''

+1

Puoi riformulare e chiarire la tua ultima affermazione sull'abbinamento di tutti gli spazi preceduti da un singolo spazio? Vuoi dire che vuoi ridurre qualsiasi numero multiplo di spazi in un unico spazio? – Dinre

+0

@Dinre, sì, voglio ridurre tutti gli spazi multipli a uno solo. Come puoi vedere, il primo gsub() (quello 'outside') fa esattamente questo, ma voglio usare solo 1 gsub(), ed è per questo che ho chiesto un modo per rimuovere tutti gli spazi preceduti da un altro spazio (per usare il stesso gsub() usato per rimuovere gli spazi finali) – Rcoster

risposta

13

Utilizzare un lookbehind positiva per vedere se lo spazio corrente è preceduto da uno spazio:

^ *|(?<=) | *$ 

Guardalo qui in azione: http://regex101.com/r/bJ1mU0

+1

+1! Nota in R abbiamo bisogno di 'perl = T' con tale regex. – agstudy

+0

Grazie Giuseppe e Agstudy! – Rcoster

+8

Per completezza (la mia risposta è stata rifiutata), ecco la funzione completa: 'trim <- function (x) return (gsub ("^* | (? <=) | * $ "," ", X, perl = T)) ' –

Problemi correlati