R语言str_replace多模式替换重复及reduce2替换异常问题求解
R语言多模式字符串替换问题解决方案
stringr包的str_replace默认采用向量化匹配逻辑:当模式、替换参数传入向量时,函数会将原字符串分别匹配每个模式生成对应数量的结果,而非按顺序叠加替换,这是两类问题的核心原因。
1. 基础替换场景实现
推荐两种实现方式,均可输出依次替换完成的单一结果:
- 方案1:使用
str_replace_all传入命名匹配规则,一次性完成所有匹配项替换
library(stringr) str_replace_all("A Bring home", c("Bring" = "NEW Bring", "home" = "NEW Home")) # 输出:[1] "A NEW Bring NEW Home"
- 方案2:使用
reduce2按自定义顺序叠加替换
library(stringr) library(purrr) reduce2( .x = c("Bring", "home"), # 按顺序排列的匹配模式 .y = c("NEW Bring", "NEW Home"), # 对应顺序的替换内容 .init = "A Bring home", # 初始字符串 .f = str_replace ) # 输出:[1] "A NEW Bring NEW Home"
2. 链接替换场景实现
之前的代码错误为reduce2参数顺序传错,将替换内容误作为匹配模式传入,才出现标签残留、匹配错误的问题。直接使用str_replace_all的多模式匹配即可完成所有链接替换:
library(stringr) origin_str <- "This is the link https://google.com also there is another link, https://yahoo.com This is the link https://google.com" # 定义匹配规则:键为要匹配的链接,值为替换后的内容 replace_rule <- c( "https://google.com" = "Click here", "https://yahoo.com" = "Click here" ) str_replace_all(origin_str, replace_rule) # 输出:[1] "This is the link Click here also there is another link, Click here This is the link Click here"
如果需要保留完整a标签结构,只需要调整替换规则的值即可:
replace_rule_with_tag <- c( "https://google.com" = "<a href=https://google.com>Click here</a>", "https://yahoo.com" = "<a href=https://yahoo.com>Click here</a>" ) str_replace_all(origin_str, replace_rule_with_tag)
内容的提问来源于stack exchange,提问作者user11740857
相关产品推荐
相关产品推荐

