如何使用tidyverse与stringr在英文句点与数字间添加空格
实现方案
你可以用stringr包中的str_replace()/str_replace_all()函数配合正则表达式实现需求,只会匹配点后面紧跟数字的场景插入空格,不会修改人名缩写等其他场景的点符号,完整实现代码如下:
- 加载依赖包
# tidyverse内置stringr,直接加载即可 library(tidyverse)
- 构造示例数据
df <- data.frame(name1 = c("Acranthera sp.01", "Aglaia spectabilis (Miq.) S.S.Jain & Bennet", "Alyxia sp.11"))
- 核心处理逻辑
df_result <- df %>% mutate(name1 = str_replace(name1, "\\.(\\d)", ". \\1"))
逻辑说明
- 正则
\\.(\\d)中,\\.匹配字面量的点符号,(\\d)捕获点后紧跟的数字存入第一个捕获组\\1 - 替换规则
. \\1就是在点和捕获到的数字中间插入一个空格 - 如果单条字符串存在多个「点+数字」的匹配场景,把
str_replace换成str_replace_all即可处理所有匹配项
- 输出结果验证
df_result # name1 # 1 Acranthera sp. 01 # 2 Aglaia spectabilis (Miq.) S.S.Jain & Bennet # 3 Alyxia sp. 11
内容的提问来源于stack exchange,提问作者Anh
相关产品推荐
相关产品推荐

