8
namez <- c("foo2003", "bar2340", "naught45")
patternz <- "03"
grepl("[patternz]$",namez)

这没用。我应该用什么替换 [patternz],所以正则表达式将匹配 patternz 变量的内容?

[编辑]请注意,我要匹配字符串“03”,而不是分别匹配数字“0”和“3”。

4

3 回答 3

10

必须承认努力想看看这里有什么问题。对于示例仅说明

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 函数完美地处理这个问题。

于 2012-08-31T12:09:45.157 回答
5

看起来你需要创建一个字符向量grepl(),使用paste0()似乎工作,虽然不是那么优雅:

> grepl(paste0("[", patternz, "]$"), namez)
[1]  TRUE  TRUE FALSE
于 2012-08-31T02:53:18.997 回答
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)

在这种情况下可能更合适,因为$具有双重含义。

于 2012-08-31T03:24:05.173 回答