2016-07-13 9 views
0

Ich habe diese Codes zu finden:Verwendung grep Brief ohne gesonderte

x=c('a','a,b','a-c','ab') 
y=c('a') 
grep(y,x,ignore.case = T) 

Das Ergebnis ist

> grep(y,x) 
[1] 1 2 3 4 

Aber ich erwarte, dass das Ergebnis sollte "1 2 3", einmal "a" ist durch irgendwas oder nur "a" getrennt, außer "a" ist nicht getrennt wie "ab". Vielen Dank!

+4

Separatoren nichts damit zu tun haben. Sie sagen 'grep()', nur nach dem Zeichen "a" zu suchen, und es findet es in jeder Zeichenkette. –

Antwort

3

eine Wortgrenze zu y hinzufügen:

x=c('a','a,b','a-c','ab') 
y=c('a\\b') 
grep(y,x,ignore.case = T) 
# [1] 1 2 3 
1

Da die OPs will ein Muster haben, die alle Buchstaben folgende ‚a‘ nicht mit umfasst ([^a-z]) oder (|) es das Ende der sein kann, Zeichenfolge $.

grep("a([^a-z]|$)", x) 
#[1] 1 2 3 

Oder wenn wir spezifisch sein wollen, dass entweder Interpunktion ([[:punct:]]) folgt ‚a‘ oder (|) es ist das Ende der Schnur, dann

grep("a([[:punct:]]|$)", x) 
#[1] 1 2 3