用另一个替换一个正则表达式匹配,反之亦然

标签 r string replace

我需要在字符串 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/

相关文章:

python - 参数未通过 rpy2 传递给 R

java - 在 Scala 中格式化字符串的最佳方式是什么?

javascript - 用 javascript 中的预期 url 替换 javascript postback

Xpath 仅选择属性的一部分

python - 如何对文件中的多个字符串进行多次修改并输出到新文件

r - 在 R 中的 for 循环中嵌入脚本

r - 将持续时间格式化为 HH :mm:ss in R

r - 我是否需要 reshape 大量数据才能有效地使用ggplot2?

javascript - 为什么 ''(空字符串)会渗透所有字符串?

java - 如何访问对象内部的元素