假设有一个形式为"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