在R中使用dplyr将字符串末尾匹配指定词组移至开头的实现方法
实现代码
你可以搭配dplyr和stringr完成需求,完整代码如下:
# 加载依赖包 library(dplyr) library(stringr) # 构造原始数据 string <- as.data.frame(c("ABA PRIMARY SCHOOL", "BLABLA SECONDARY SCHOOL", "WAZA INSTITUT", "INSTITUT WAMA", "PRIMARY SCHOOL WAMA")) %>% rename(raw_str = 1) trail = c(" PRIMARY SCHOOL", " SECONDARY SCHOOL", " INSTITUT") # 构造匹配字符串末尾的正则规则 trail_pattern <- paste0("(", paste(str_escape(trail), collapse = "|"), ")$") # 数据处理 result <- string %>% mutate( # 提取末尾匹配到的固定词组 match_trail = str_extract(raw_str, trail_pattern), # 移除原字符串末尾的匹配词组 remain_part = str_remove(raw_str, trail_pattern), # 拼接得到最终结果,未匹配到词组的字符串直接保留原值 goal = ifelse(!is.na(match_trail), paste0(str_trim(match_trail), " ", remain_part), raw_str) ) %>% select(goal)
逻辑说明
- 先把所有需要匹配的尾缀词组拼接成适配字符串末尾的正则规则,
str_escape用来规避尾缀中存在特殊正则字符的匹配错误问题。 - 分三步处理每一行字符串:提取尾缀、移除原字符串的尾缀、拼接成“尾缀在前剩余内容在后”的格式,没有匹配到尾缀的字符串直接返回原值。
- 最终输出的
result和你给出的goal示例完全一致。
内容的提问来源于stack exchange,提问作者AnEostig
相关产品推荐
相关产品推荐

