我希望在第一次出现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
感谢您的帮助。
答案 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
其他地方的占位符字符,然后使用gsub
将2
gsub
替换为@
。