用单个表达式匹配多个替换模式

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

我从 R 文档中知道,可以对

gsub
函数进行编程以执行同时操作,例如大写/小写替换:

gsub("([a-z]*)([A-Z]*)", "\\U\\1\\L\\2", "upper LOWER", perl=TRUE)

[1] "UPPER lower"

我有一个最小的例子,一个字符串“STTS”,我想用“TRUE”替换“S”,用“FALSE”替换“T”。我不能按顺序进行,因为匹配的模式显然会发生冲突。

我已经尝试过这段代码:

gsub("([S]*)\\1([T]*)\\2", "TRUE \\1FALSE \\2", "STTS",perl=TRUE)

已收到

[1] "TRUE FALSE STRUE FALSE TSTRUE FALSE "

而不是

"TRUE FALSE FALSE TRUE"

r regex string perl gsub
1个回答
0
投票

您可以在此处使用

stringr::str_replace_all
应用条件替换:

library(stringr)
trimws(str_replace_all("STTS", "[ST]", function(x) ifelse(x=="S", "TRUE ", "FALSE ")))
## => [1] "TRUE FALSE FALSE TRUE"

此处使用 R 版本 4.3.1 (2023-06-16 ucrt)。

因此,

[ST]
模式找到
S
T
,并且根据与替换函数的匹配来替换该字母。

请参阅在线 R 演示。由于我们在每个

TRUE
FALSE
之后添加了一个空格,所以我添加了
trimws()
函数。

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