2016-03-01 24 views
5

gsub kullanarak standart bir tire olduğunu düşündüğüm şeyi değiştirmeye çalışıyordum. Ben test oldu kodu:Özel karakterler içeren R gsub

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

Bu da, hiçbir şey yok. Ben kopyaladı ve http://unicodelookup.com/#–/1 içine yapıştırılmış ve bir en çizgi gibi görünüyor. Bu site bir en çizgi için hex, dec vb kodları sağlar ve ben en dash yerine çalışıyorum ama şansım yok. Öneriler?

(Bir bonus olarak, yardımcı olabilecek özel karakterleri tanımlamak için bir işlev olup olmadığını söylerseniz).

SO'nın kod biçimlendirmesinin çizgi biçimini değiştirip değiştirmeyeceğinden emin değilim. Bu yüzden kullanıyorum (-).

cevap

4

En-dash'i yalnızca normal ifade deseninde belirterek değiştirebilirsiniz.

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

Sen, bir dizede ASCII olmayan karakterler varsa IDEONE demo

kontrol etmek için Bkz

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

ile tüm tr tire ve em-tire maç kullanabilirsiniz

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

Bkz. this IDEONE demo

Boş bir sonuç elde edersiniz (bir dize yalnızca "kelime" karakterlerinden ve boşluklardan oluşursa) veya - burada olduğu gibi - bazı "özel" karakterler. Özel karakter değişimi için negatif bir tamamlayıcı yapabilirsiniz

+0

Bu harika. Belki de "özel karakterler" ile doğru terminolojiyi kullanmıyordum. Bununla kastettiğim, standart UTF-8 olmayan karakterler. Örneğin, ô - bunlar readr :: write_csv() öğesini kullanarak dışa aktarırken garip görünen karakterlerdir. Verdiğiniz gsub, "ô" yi "özel karakter" olarak tanımlamak için değiştirilebilir. – ZRoss

+1

Tüm ascii: gsub ("[[: ascii:]] +", "", s) 'ile eşleşen bir regex ile kullanabilirsiniz. Bu, tüm ascii'leri sonuçtaki tüm Unicode karakterlerini koruyan bir dizgeden kaldıracaktır. –

+0

Sadece bir PCRE yapısı olduğundan, yukarıdaki regex deseniyle 'perl = T 'kullanmanız gerekiyor. –

2

. Tüm özel karakterleri ABC ile değiştirecek

gsub('[^\\w]*', 'ABC', 'reported - estimate', perl = True). [^ \ W], normal bir karakter olmayan bir şey söyleyen bir kalıptır.