2015-02-01 10 views

Odpowiedz

8

Można użyć gsub:

vec <- "PRODUCT colgate good but not goodOKAY" 

gsub(".*PRODUCT\\s*|OKAY.*", "", vec) 
# [1] "colgate good but not good" 
9
x = "PRODUCT colgate good but not goodOKAY" 
library(stringr) 
str_extract(string = x, pattern = perl("(?<=PRODUCT).*(?=OKAY)")) 

(?<=PRODUCT) - wygląd za meczem dla PRODUCT

dopasuj wszystko oprócz nowych linii.

(?=OKAY) - patrz wcześniej, aby dopasować OKAY.

Powinienem dodać, że nie potrzebujesz do tego pakietu stingr, funkcje podstawowe sub i gsub działają bez zarzutu. Używam stringr, ponieważ jest to spójność składni: czy wyodrębniam, zastępuję, wykrywam itd. Nazwy funkcji są przewidywalne i zrozumiałe, a argumenty są w spójnej kolejności. Używam stringr, ponieważ oszczędza mi to potrzebnej dokumentacji za każdym razem.

13

Można to zrobić z sub:

s <- "PRODUCT colgate good but not goodOKAY" 
sub(".*PRODUCT *(.*?) *OKAY.*", "\\1", s) 

podając: Potrzebne są

[1] "colgate good but not good" 

Brak pakietów.

Oto wizualizacja wyrażenia regularnego:

.*PRODUCT *(.*?) *OKAY.* 

Regular expression visualization

Debuggex Demo

5

Można użyć funkcji rm_between z qdapRegex opakowaniu. Bierze ciąg znaków i lewą i prawą granicę w następujący sposób:

x <- "PRODUCT colgate good but not goodOKAY" 

library(qdapRegex) 
rm_between(x, "PRODUCT", "OKAY", extract=TRUE) 

## [[1]] 
## [1] "colgate good but not good" 
Powiązane problemy