R语言:如何仅替换数据框列中演员姓名内的空格为指定字符?
解决R中仅替换双引号内空格的问题
我明白你的问题了——你想精准替换双引号内演员姓名里的空格,但不想碰引号外面的空格对吧?之前直接用str_replace_all(r, "\\s", ".")会匹配所有空白字符,包括逗号前后的空格,自然会搞乱原向量的格式。下面给你两种靠谱的解决方法:
方法1:正则环视精准匹配引号内的空格
利用正则的正向/反向环视,只定位到双引号内部的空格进行替换,代码如下:
library(stringr) r <- "c(\"Christian Slater\", \"Tara Reid\", \"Stephen Dorff\", \"Frank C. Turner\")" result <- str_replace_all(r, '(?<="[^"]*)\\s(?=[^"]*")', '.') cat(result)
正则解释:
(?<="[^"]*):反向预查,确保空格前面是双引号,且引号后跟着非引号字符(说明在引号内部)\\s:匹配要替换的目标空格(?=[^"]*"):正向预查,确保空格后面跟着非引号字符和双引号(仍在引号内部)
运行后输出的结果正是你想要的:
c("Christian.Slater", "Tara.Reid", "Stephen.Dorff", "Frank.C..Turner")
方法2:分割-处理-拼接(更直观)
如果觉得正则有点绕,也可以把字符串按双引号分割,只处理引号包裹的内容,再拼接回去:
library(stringr) r <- "c(\"Christian Slater\", \"Tara Reid\", \"Stephen Dorff\", \"Frank C. Turner\")" # 按双引号分割字符串 parts <- str_split(r, '"')[[1]] # 只处理索引为偶数的部分(这些是被双引号包裹的姓名) parts[seq(2, length(parts), 2)] <- str_replace_all(parts[seq(2, length(parts), 2)], '\\s', '.') # 拼接回原格式 result <- paste(parts, collapse = '"') cat(result)
这种方法逻辑更直白:分割后,奇数位置是引号外的向量语法部分,偶数位置是演员姓名,我们只替换姓名里的空格,最后再拼回去,同样能得到正确结果。
内容的提问来源于stack exchange,提问作者b_kaufman
相关产品推荐
相关产品推荐

