2013-02-06 17 views
6

Yalnızca 1 gsub kullanarak birden fazla boşluğu ve sondaki boşlukları nasıl kaldırabilirim? Bu işlevi zaten trim <- function(x) gsub(' {2,}',' ',gsub('^ *| *$','',x)) yaptım, ancak sadece 1 gsub ile yeniden yazmaya çalışıyorum. Aslında, gsub ile/sonrasında olana dayalı bir şeyle nasıl eşleşmesi gerektiği konusunda yalın davranmak istiyorum.gsub kullanarak birden çok boşluğu ve sondaki boşlukları kaldırma

^ *|(?<=) | *$ 

: Bu örnekte ben tek bir boşlukla preceeded tüm boşlukları maç ve geçerli uzay önünde bir boşluk olup olmadığını görmek için

+1

Tek bir alanın önündeki tüm boşlukları eşleştirmeyle ilgili son ifadenizi yeniden ifade edebilir ve netleştirebilir misiniz? Birden fazla boşluğu tek bir alana indirgemek istediğiniz anlamına mı geliyor? – Dinre

+0

@Dinre, evet, tüm çoklu alanları tek bir alana indirmeyi istiyorum. Görebildiğiniz gibi, 1. gsub() ('dışarıdan') bunu tam olarak yapar, ancak sadece 1 gsub() kullanmak istiyorum, bu yüzden başka bir alanın önündeki tüm boşlukları kaldırmanın bir yolunu sordum (aynı gsub() sondaki boşlukları kaldırmak için kullanılır) – Rcoster

cevap

13

Kullanım olumlu olan ileriye dönük '' bunları değiştirmeniz gerekiyor Burada görüyoruz: http://regex101.com/r/bJ1mU0

+1

+1! R'de, bu tür bir regex ile 'perl = T' ye ihtiyacımız var. – agstudy

+0

Teşekkürler Joseph ve agstudy! – Rcoster

+8

Tamlık için (yanıt vermem reddedildi), işte tam fonksiyon: 'trim <- function (x) return (gsub ("^* | (? <=) | * $ "," ", X, perl = T)) ' –

İlgili konular