假設有一個形式爲"foo"
或"foo|baz|bar"
(單個單詞或多個單詞用"|"
之類的特殊字符分隔的單詞)的向量,我們也給出了一個單詞,我們希望找到它向量中的哪個項目有全字匹配。R grep用特殊字符分隔的整個單詞
例如字"foo"
具有"foo|baz|bar"
一個整體匹配,而不是在任一"foobaz|bar"
或"bazfoo"
一個整體匹配。
首先,我試圖用"\\b"
指示開始或整個單詞的末尾邊緣和它的作品成功:
grep("\\bfoo\\b", "foo") # match
grep("\\bfoo\\b", "foobaz|bar") # mismatch
grep("\\bfoo\\b", "bazfoo") # mismatch
然後我試圖添加"|"
爲兩端的其他可能的分離器,與"\\b"
組使用它和[
]
:
grep("[|\\b]foo[|\\b]", "foo|baz|bar") # mismatch!
grep("[|\\b]foo[|\\b]", "foo") # mismatch!
後來我發現\\b
不是小號指標撻或結尾的字符串,但是整個單詞的開頭或結尾(如太多字符像空格和,|-^.
但是不是數字和下劃線_
分開的整個單詞)。因此"[|\\b]foo[|\\b]"
與所有這些字符串匹配:"foo", "foo|bar|baz", "foo-bar", "baz foo|bar"
但不匹配到"foo_bar"
或"foo2"
。
但我的問題仍然存在:爲什麼"[|\\b]foo[|\\b]"
模式不能與"foo"
匹配?
對我來說很難選擇正確的答案,因爲他們中的大多數都非常完美! – Ali