正则变量替换"替换"争论

时间:2014-04-21 20:02:54

标签: regex r

我在R中有一个字符串。我想找到字符串的一部分并附加可变数量的零。例如,我有1 2 3。有时我希望它是1 20 3;有时我希望它是1 2000 3。如果我在变量中存储附加零的数量,我怎样才能在"替换"中使用它。 sub命令的一部分?

我记得这样的代码:

s <- '1 2 3'
z <- '3'
sub('(\\s\\d)(\\s.*)', '\\10{z}\\2', s)

此代码返回1 20{z} 3。但我想要1 2000 3。我怎样才能得到这种结果?

一种方法是

s  <- '1 2 3'
z  <- '3'   
zx <- paste(rep(0, z), collapse = '')
sub('(\\s\\d)(\\s.*)', paste0('\\1', zx, '\\2'), s)    

但这有点笨重。

2 个答案:

答案 0 :(得分:0)

尝试使用stringi包中的连接运算符:

require(stringi)
"abc"%stri+%"123abc"
## [1] "abc123abc"

答案 1 :(得分:0)

您创建替换字符串zx的方法非常好。但是,您可以改进sub命令。如果使用lookbehind和lookahead而不是匹配组,则无需创建新的替换字符串。您可以直接使用zx

sub("(?<=\\s\\d)(?=\\s)", zx, s, perl = TRUE)
# [1] "1 2000 3"