我需要在字符串 foo bar foo bar bar foo
中将所有 foo
替换为 bar
并将所有 bar
替换为 foo
。所以结果应该看起来像 bar foo bar foo foo bar
。
我试过这种方式:
library(stringr)
my_str <- "foo bar foo bar bar foo"
rslt <- str_replace_all(my_str, c("foo", "bar"), c("bar", "foo"))
print(rslt)
但是我得到了 "bar bar bar bar bar bar" "foo foo foo foo foo foo"
。问题: 如何更正我的代码以便获得
bar foo bar foo foo bar
?
最佳答案
一个选项是 split
并替换
str_c(setNames(v1, rpl)[str_split(my_str, "\\s+")[[1]]], collapse = ' ')
#[1] "bar foo bar foo foo bar"
或者另一个选项是
gsubfn
library(gsubfn)
gsubfn("(\\w+)", setNames(as.list(v1), rpl), my_str)
#[1] "bar foo bar foo foo bar"
关于用另一个替换一个正则表达式匹配,反之亦然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65483645/