R grep整个单词由特殊字符分隔

标签 r regex

假设有一个 "foo""foo|baz|bar" 形式的序列向量(一个单词或多个单词由特殊字符分隔,例如"|"),我们也得到了一个单词,我们想要找到它与向量中的哪些项目有整个单词匹配。

例如,单词 "foo""foo|baz|bar" 中有完整匹配,但在 "foobaz| 中没有完整匹配bar""bazfoo"

首先,我尝试使用 "\\b" 来指示整个单词的开始边缘或结束边缘,并且它成功运行:

grep("\\bfoo\\b", "foo")         # match
grep("\\bfoo\\b", "foobaz|bar")  # mismatch    
grep("\\bfoo\\b", "bazfoo")      # mismatch

然后我尝试添加 "|" 作为两端的另一个可能的分隔符,并使用 []:

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" 匹配?

最佳答案

你可以使用strplit:

> "foo" %in% unlist(strsplit("foo|baz|bar", split = "|", fixed = TRUE))
[1] TRUE

您可以对其进行矢量化:

> z <- c("foo|baz|bar", "foobaz|bar", "bazfoo")
> x <- c("foo", "foot")
> sapply(strsplit(z, split = "|", fixed = TRUE), function(x,y)y %in% x, x)
      [,1]  [,2]  [,3]
[1,]  TRUE FALSE FALSE
[2,] FALSE FALSE FALSE

关于R grep整个单词由特殊字符分隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12885257/

相关文章:

php - 重叠匹配的正则表达式

r - 根据字符串长度过滤行名称

r - 软件包 ‘syncwave’/‘mvcwt’ 不可用(适用于 R 版本 3.0.2)

python - 替换字符串中的货币值时,Python 中的 re.sub() 并不总是有效

asp.net - 如何转义在 IE 上生成 “unexpected quantifier"错误的 RegEx?

regex - Attoparsec 解析失败但不应该有适当的回溯

r - 为具有不同观测数量的面板数据中的每年分配五分位数

R 描述文件 : is it possible to "conditionally" import packages?

r - 我应该如何使用数据库中的先前列来创建新变量

python - 创建一个正则表达式来搜索单词?