首次出现后替换字符串中的元素

时间:2016-05-09 21:32:01

标签: regex r string

我希望在第一次出现2后替换字符串中的所有2,理想情况下使用基座regex中的R。这似乎必须是重复的,但我找不到答案。

以下是一个例子:

my.data <- read.table(text='
                         my.string
                         .1.222.2.2
                         ..1..1..2.
                         1.1.2.2...
                         .222.232..
                         ..1..1....
', header=TRUE, stringsAsFactors = FALSE)
my.data

desired.result <- read.table(text='
                         my.string
                         .1.2......
                         ..1..1..2.
                         1.1.2.....
                         .2....3...
                         ..1..1....
', header=TRUE, stringsAsFactors = FALSE)
desired.result

my.last.2 <- c(4, 9, 5, 2, NA)
my.last.2

感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

这似乎与您想要的输出相符:

> gsub(pattern = "(?<=2)(.*?)2",
       replacement = "\\1\\.",
       x = my.data$my.string,
       perl = TRUE)
[1] ".1.2......" "..1..1..2." "1.1.2....." ".2....3..." "..1..1...."

这实际上是从this回答一个非常类似的问题的直接修改,以使其具体化。我说实话,我不太了解这个正则表达式,所以请谨慎使用(和投票)。

答案 1 :(得分:2)

这样可行,但可能效率低下:

with(my.data, gsub("@", "2", gsub("2", ".", sub("2", "@", my.string))))
# [1] ".1.2......" "..1..1..2." "1.1.2....." ".2....3..." "..1..1...."

方法:使用sub仅匹配第一个匹配项并将其更改为@(或其他一些不会显示在my.string其他地方的占位符字符,然后使用gsub2 gsub替换为@