防止正则表达式覆盖之前的语句

问题描述 投票:0回答:2

我有以下字符串:

a = "in the year 2010-01-01 there was a red dog and in the year 2011-01-01 there was a blue cat"

我的问题:在上面的字符串中,我想将每个 2010 替换为 2011,将每个 2011 替换为 2012。

我尝试了以下代码:

b = gsub("2010", "2011", a)
b = gsub("2011", "2012", b)

但是它覆盖了我的进步!

我用 3 个迷你语句做到了这一点:

b = gsub("2010", "temp", a)
b = gsub("2011", "2012", b)
b = gsub("temp", "2011", b)

但是有没有一种更快的方法可以通过一行代码来完成此操作?

r string gsub
2个回答
2
投票
stringr::str_replace_all(a, c("2011" = "2012", "2010" = "2011"))

或与基数R:

a |> gsub("2011", "2012", x = _) |> gsub("2010", "2011", x = _)

2
投票

如果我理解正确的话,您可以简单地先将 2011 替换为 2012,然后按顺序替换 2010 到 2011:

b <- gsub("2011", "2012", b, fixed=TRUE)
b <- gsub("2010", "2011", b, fixed=TRUE)

更一般地,您可以使用带有回调函数的正则表达式替换。

© www.soinside.com 2019 - 2024. All rights reserved.