2012-08-02 15 views
17

Próbuję usunąć podciągi przed podkreśleniem w łańcuchu. Chcę używać * (wildcard) jako bitu przed podkreślenia mogą się różnić:Usuń wzór z ciągu znaków za pomocą gsub

a <- c("foo_5", "bar_7") 

a <- gsub("*_", "", a, perl = TRUE) 

wynik powinien wyglądać następująco:

> a 
[1] 5 7 

Próbowałem również rzeczy jak "^ * " lub " ? "ale tak naprawdę nie działa.

Odpowiedz

34

Poniższy kod działa na przykład:

gsub(".*_", "", a) 
+0

wielkie dzięki. Co oznacza "." oznacza? Dlaczego gwiazda "*" (symbol wieloznaczny) nie działa samodzielnie? Nie rozumiem? – user969113

+4

"." oznacza dowolną postać, więc ". *" oznacza dowolną liczbę dowolnych postaci. Więcej objaśnień można znaleźć, wpisując '? Regex'. – Pop

+1

Ah Widzę! Myślałem, że * zawiera znaczenie "." już! Cóż, teraz wiem lepiej. dzięki jeszcze raz! – user969113

4

Alternatywnie, można też spróbować:

gsub("\\S+_", "", a) 
-4
as.numeric(gsub(pattern=".*_", replacement = '', a) 
[1] 5 7 
+2

Zawsze dodawaj wyjaśnienia do swojej odpowiedzi poza kodem, aby lepiej zrozumieć – bigbounty

Powiązane problemy