2015-07-31 9 views
6

Jestem pewien, że to naprawdę łatwe pytanie. W międzyczasie jestem zaznajomiony z RegEx w R, ale po prostu nie mogę tego zrozumieć.Jak zastąpić nawiasy za pomocą wyrażeń regularnych w R?

Przypuśćmy, że mamy ten ciąg:

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

Teraz, wszystko co chcę zrobić, to usunąć cytaty kropka The nawiasach zamykanie i nawiasy zamykające.

Tak, chcę: "a b".

Próbowałem:

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

To nie działa. Zwraca: "a b .) ]" Nic nie zostaje usunięte.

Jak tylko wyklucza \\] od wzorca wyszukiwania, to działa ...

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

Ale, oczywiście, nie usuwa wsporniki zamknięcia!

Co zrobiłem źle?!?

Dzięki za pomoc!

+3

Spróbuj 'gsub ('[[: punct:]] +', '', a)' Byłoby lepiej pokazać również oczekiwany otuput. lub 'gsub ('[] [] | [.")]', '', a) ' – akrun

+0

Dzięki! Drugi działa dla mnie. Oczywiście, wersja [[: punct:]] też by działała, ale Nie chcę usunąć WSZYSTKIE interpunkcji.Możesz dać mi wskazówkę, dlaczego moja wersja nie działa.Chcę zrozumieć problem.Dziękuję! – swolf

Odpowiedz

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

Jeśli chcesz zawierać nawiasu zamykającego znaku w wyrażeniu wspornika należy zawsze umieścić go najpierw w nawiasach; powoduje, że jest on traktowany jako znak w wyrażeniu nawiasowym, a nie jako zamykający ogranicznik wyrażenia nawiasowego.

+1

w porządku! Dzięki za wyjaśnienie! – swolf

2

Opierając się na @akruns skomentować

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

zastąpić okres w pierwszym zestawie wspornikach którykolwiek znaki przestankowe, które chcesz zachować.

+0

miła alternatywa, dzięki! – swolf

1

Możesz spróbować tego.

Powiązane problemy