2014-11-08 128 views
32
string = c("apple", "apples", "applez") 
grep("apple", string) 

這會給我string中所有三個元素的索引。但我想要一個完全匹配的單詞「蘋果」(即我只想grep()返回索引1)。如何使用grep()查找完全匹配

+2

對於完全匹配,請考慮使用'=='或'match'。 – flodel 2014-11-08 04:20:02

+0

對於gsub而不是grep呢? – 2016-11-10 00:33:27

回答

57

使用單詞邊界\b這一個字和非單詞字符之間的匹配,

string = c("apple", "apples", "applez") 
grep("\\bapple\\b", string) 
[1] 1 

OR

使用錨。 ^斷言我們是在開始。 $斷言我們在最後。

grep("^apple$", string) 
[1] 1 

您可以將正則表達式存儲在變量中,然後像下面一樣使用它。

pat <- "\\bapple\\b" 
grep(pat, string) 
[1] 1 
pat <- "^apple$" 
grep(pat, string) 
[1] 1 

更新:

paste("^",pat,"$", sep="") 
[1] "^apple$" 
string 
[1] "apple" "apple:s" "applez" 
pat 
[1] "apple" 
grep(paste("^",pat,"$", sep=""), string) 
[1] 1 
+0

'paste0(「^」,pat,「$」)'可以保存一些輸入到'paste'上的字符。不需要'sep =「」' – Ben 2015-10-23 05:28:30

19

精確匹配,這使得使用==最有意義。另外,這將比grep()更快,並且顯然更容易。

which(string == "apple") 
# [1] 1