2015-07-31 15 views
6

Bunun gerçekten kolay bir soru olduğundan eminim. Bu arada RegEx in R'ye aşina olduğumu biliyorum, ama kafamı bunun etrafında alamıyorum.R'de normal ifadeleri kullanarak parantezleri nasıl değiştiririm?

a <- c("a b .) ] \"")

Şimdi, yapmak istediğim her tırnak, nokta, kapanış parantez ve kapanış parantez silmektir:

varsayalım, bu dize var.

İstediğim: "a b".

Denedim: O çalışmıyor

gsub("[.\\)\"\\]]", "", a)

. Geri döner: "a b .) ]" Yani hiçbir şey kaldırılmaz.

En kısa zamanda arama deseninden \\] dışlamak gibi çalışır ...

gsub("[.\\)\"]", "", a)

Ama, tabii ki, kapanış parantez kaldırmaz!

Neyi yanlış yaptım?!?

Yardımlarınız için teşekkürler!

+3

Gsub'u deneyin ('[[: punct:]] +', '' a) 'Beklenen otuput'u da göstermek daha iyi olur. veya gsub ('[] [] | [. ")]', '', a) ' – akrun

+0

Teşekkürler, ikincisi benim için çalışıyor.Tabii ki, [[: nokta:]] versiyonu da işe yarayacaktı TÜM noktalama işaretlerini kaldırmak istemiyorum.Yeni versiyonumun neden çalışmadığına dair bir ipucu verebilir misiniz? Sorunu anlamak istiyorum Teşekkürler! – swolf

cevap

2
a <- c('a b .) ] "'); 
gsub('\\s*[].)"]\\s*','',a); 
## [1] "a b" 

Yakın parantez karakterini bir parantez ifadesine dahil etmek istediğinizde, her zaman ilk önce parantez içine eklemelisiniz; Bu, braket ifadesinin kapanış sınırlayıcısı yerine, köşeli ayraç ifadesi içinde bir karakter olarak alınmasına neden olur. @akruns üzerinde

+1

tamam! Açıklama için teşekkürler! – swolf

2

Bina

library(stringr) 
str_trim(gsub('[.]|[[:punct:]]', '\\1', a)) 

saklamak istediğiniz hangisi noktalama işaretleri ile parantez ilk sette dönemini değiştirmek açıklama.

+0

nice alternative, teşekkürler! – swolf

1

Bunu deneyebilirsiniz.

> gsub("\\b\\W\\b(*SKIP)(*F)|\\W", "", a, perl=T) 
[1] "a b" 
> gsub("\\b(\\W)\\b|\\W", "\\1", a, perl=T) 
[1] "a b" 
İlgili konular