stringr str_replace 多个模式和替换?

use*_*745 1 r stringr

我试过

> str_replace("abcdef", c("b", "d"), c(b="B", d="D"))
[1] "aBcdef" "abcDef"
Run Code Online (Sandbox Code Playgroud)

希望

[1] "aBcDef"
Run Code Online (Sandbox Code Playgroud)

我们如何用一个特定的替换来替换每个模式,并调用一个函数stringr::str_replace

小智 24

chartr()解决方案对我来说也是新的,但我想用多个字符替换单个字符。最终找到了一个stringr(v1.4.0)非常简单的解决方案。事实上,它在帮助页面中,一旦发现这需要str_replace_all.

# one approach that both: answers the original question with stringr
str_replace_all("abcdef", c(b="B", d="D"))
[1] "aBcDef"

# and answers a more general question
str_replace_all("abcdef", c(b="BB", d="DDD"))
[1] "aBBcDDDef"
Run Code Online (Sandbox Code Playgroud)


akr*_*run 7

str_replace一个选项是用reduce2

library(stringr)
library(purrr)
reduce2(c('b', 'd'), c('B', 'D'),  .init = 'abcdef', str_replace)
#[1] "aBcDef"
Run Code Online (Sandbox Code Playgroud)

或者使用匿名函数调用

reduce2(c('b', 'd'), c('B', 'D'),  .init = 'abcdef',
         ~ str_replace(..1, ..2, ..3))
#[1] "aBcDef"
Run Code Online (Sandbox Code Playgroud)

  • @akrun 我想让你知道,多年来我一直在到处寻找你的答案,它们似乎总是正确的、有帮助的、清晰的。谢谢。 (2认同)

G. *_*eck 6

这匹配每个字符,如果等于,b则将其替换为B,如果等于d,则将其替换为D,否则保持原样。

library(gsubfn)
gsubfn(".", list(b="B", d="D"), "abcdef")
## [1] "aBcDef"
Run Code Online (Sandbox Code Playgroud)

这些也有效:

gsubfn("[bd]", list(b="B", d="D"), "abcdef")
## [1] "aBcDef"

gsubfn("[bd]", toupper, "abcdef")
## [1] "aBcDef"

# only needs base R
chartr("bd", "BD", "abcdef")
## [1] "aBcDef"
Run Code Online (Sandbox Code Playgroud)


Mar*_*Blo 0

我会把它放在管子里

str_replace('abcdef', 'b', 'B') %>% str_replace(., 'd', 'D')
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,但我正在尝试重构为一个函数调用 (2认同)