如何在正则表达式中包含对象

时间:2012-08-31 02:48:36

标签: regex r object

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

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

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

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)
在这种情况下,

可能更合适,因为$具有双重含义。