替换重新访问的字符串的前N个点

时间:2013-05-20 19:58:23

标签: regex r

1月份,我问过如何替换字符串的前N个点:replace the first N dots of a string

DWin的回答非常有帮助。可以推广吗?

df.1 <- read.table(text = '

         my.string     other.stuff

     1111111111111111     120
     ..............11     220
     11..............     320
     1...............     320
     .......1........     420
     ................     820
     11111111111111.1     120

', header = TRUE)

nn <- 14

# this works:

df.1$my.string <- sub("^\\.{14}", paste(as.character(rep(0, nn)), collapse = ""), 
df.1$my.string)

# this does not work:

df.1$my.string <- sub("^\\.{nn}", paste(as.character(rep(0, nn)), collapse = ""), 
df.1$my.string)

2 个答案:

答案 0 :(得分:3)

使用sprintf可以获得所需的输出

nn <- 3
sub(sprintf("^\\.{%s}", nn),
    paste(rep(0, nn), collapse = ""), df.1$my.string)

## [1] "1111111111111111" "000...........11" "11.............."
## [4] "1..............." "000....1........" "000............."
## [7] "11111111111111.1"

答案 1 :(得分:0)

 pattstr <- paste0("\\.", paste0( rep(".",nn), collapse="")  )
 pattstr
#[1] "\\..............."
 df.1$my.string <- sub(pattstr, 
                       paste0( rep("0", nn), collapse=""),
                       df.1$my.string)

> df.1
         my.string other.stuff
1 1111111111111111         120
2  000000000000001         220
3 11..............         320
4  100000000000000         320
5  00000000000000.         420
6  00000000000000.         820
7 11111111111111.1         120