namez <- c("foo2003", "bar2340", "naught45")
patternz <- "03"
grepl("[patternz]$",namez)
这没用。我应该用什么替换 [patternz],所以正则表达式将匹配 patternz 变量的内容?
[编辑]请注意,我要匹配字符串“03”,而不是分别匹配数字“0”和“3”。
必须承认努力想看看这里有什么问题。对于示例仅说明
R> namez <- c("foo2003", "bar2340", "naught45")
R> patternz <- "03"
R> grepl(patternz, namez)
[1] TRUE FALSE FALSE
patternz
和字符向量一样是必需的,目的不是匹配0
& 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 函数完美地处理这个问题。
看起来你需要创建一个字符向量grepl()
,使用paste0()
似乎工作,虽然不是那么优雅:
> grepl(paste0("[", patternz, "]$"), namez)
[1] TRUE TRUE FALSE
包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)
在这种情况下可能更合适,因为$
具有双重含义。