用不同的字符串替换第二次出现的字符串

时间:2018-04-12 00:46:08

标签: r regex

我有一个非常简单的问题,用新字符串替换第二次出现的字符串。

假设我们有这个字符串

string <- c("A12A32") 

我们希望将第二个A替换为B字符串。 A12B32是预期的输出。

关注此相关帖子 How to replace second or more occurrences of a dot from a column name

我试过了,

replace_second_A <-  sub("(\\A)\\A","\\1B",  string)
print(replace_second_A)

[1] "A12A32"

第二个A为什么似乎没有变化?

2 个答案:

答案 0 :(得分:3)

请注意。*?匹配最短的字符串直到下一个A:

string <- "A12A32"
sub("(A.*?)A", "\\1B", string)
## [1] "A12B32"

答案 1 :(得分:2)

首先,不需要使用反斜杠转义A字母。它们只需要转义具有其他含义的特殊字符例如“。”意思是“任何角色”,“\\。”意思是“时期”。

其次,你的正则表达式“(\\ A)\\ A”读取“匹配A后跟另一个A,保留第一个A以供重用。”您没有两个连续的“A”,它们用数字分隔。

这样可行(“\\ d +”表示“匹配1位或更多位数”):

sub("(A\\d+)A","\\1B",  "A12A32")
[1] "A12B32"