namez <- c("foo2003", "bar2340", "naught45")
patternz <- "03"
grepl("[patternz]$",namez)
它不起作用。我应该用[patternz]替换什么,所以正则表达式将匹配patternz变量的内容?
[edit] 请注意,我想分别匹配字符串“03”,而不是数字“0”和“3”。
答案 0 :(得分:10)
必须承认在这里努力查看问题所在。仅举例说明
R> namez <- c("foo2003", "bar2340", "naught45")
R> patternz <- "03"
R> grepl(patternz, namez)
[1] TRUE FALSE FALSE
是必需的,因为patternz
是一个字符向量,目标是不匹配0
&amp; 3
,而是匹配文字"03"
如果您只需要在字符串末尾匹配,那么我们需要手动添加"$"
:
R> patternz2 <- "03$"
R> grepl(patternz2, namez)
[1] TRUE FALSE FALSE
或通过paste0()
操作
R> grepl(paste0(patternz, "$"), namez)
[1] TRUE FALSE FALSE
问题是使用patternz
作为实际的正则表达式,基本R函数可以完美地处理它。
答案 1 :(得分:5)
看起来你需要为grepl()
创建一个字符向量,使用paste0()
似乎有效,但不是那么优雅:
> grepl(paste0("[", patternz, "]$"), namez)
[1] TRUE TRUE FALSE
答案 2 :(得分:4)
包gsubfn
是你的朋友
library(gsubfn)
namez <- c("foo2003", "bar2340", "naught45")
patternz <- "03"
fn$grepl("[$patternz]$",namez)
#> fn$grepl("[$patternz]$",namez)
#[1] TRUE TRUE FALSE
最初你表示你想在字符串的末尾匹配0或3。在你的评论中,你提到可能想要匹配'03',在这种情况下
fn$grepl("$patternz$",namez)
会更合适。
也
fn$grepl("`patternz`$",namez)
在这种情况下,可能更合适,因为$
具有双重含义。