2016-07-05 204 views
0

我嘗試設置grep搜索以明確匹配字符串。Grep搜索明確匹配

這是我的主題矢量:

a <- c("a1", "a10", "a1, a2", "a3, a1", "a100", "b1", "c1b1") 

我的查詢:

b <- c("a1", "b1") 

和預期輸出:

a[c(1, 3, 4, 6)] 
[1] "a1"  "a1, a2" "a3, a1" "b1" 

我試了一下,到目前爲止。我使用|來搜索a中的每個b值。包括一個$停止並不完全正確的工作:

a[grep(paste(b, collapse = "$|"), a)] 
[1] "a1"  "a3, a1" "b1"  "c1b1" 

在此先感謝。

+0

難道你看看'paste(b,collapse =「$ |」)'return?這解析成'a1 $ | b1',所以我的結果是正常的 - 即'a1,a2'沒有被採用。您是否打算檢索具有邊界的值? –

回答

3

您可以添加文字邊界匹配你需要什麼明確:

a[grep(paste0("\\b", b, "\\b", collapse = "|"), a)] 
#[1] "a1"  "a1, a2" "a3, a1" "b1" 

的正則表達式是那麼"\\ba1\\b|\\bb1\\b"

由於投入(現已刪除)@docendo答案,無需子集a,你可以直接使用參數的grepvalue,設置爲TRUE檢索值:

grep(paste0("\\b", b, "\\b", collapse = "|"), a, value=TRUE) 
# [1] "a1"  "a1, a2" "a3, a1" "b1" 
+1

我想這甚至是'a [grep(paste(「\\ b」,b,「\\ b」,sep =「」,collapse =「|」),a)]',即沿着兩邊的邊界'b'elements。 –

+0

@EricLecoutre可能,即使字符串中的'b1'沒有任何含義,但可以發生 – Cath