R语言如何使用正则替换字符串中点号,得到下划线分隔的目标结果
解决方案
你可以通过两次正则替换实现需求,base R 自带的 gsub() 函数就能完成,逻辑如下:
- 先删除字符串首尾的所有连续点
- 再将字符串中间的所有连续点统一替换为下划线
代码示例
构造测试数据
str_vec <- c( "..A.B....c...A..D..", "A..S.E.Q.......AW..", ".B.C..a...R......Ds" )
base R 实现
# 内层gsub删除首尾点,外层gsub替换中间连续点为下划线 result <- gsub("\\.+", "_", gsub("^\\.+|\\.+$", "", str_vec))
正则说明
^\\.+:匹配字符串开头的1个或多个点\\.+$:匹配字符串结尾的1个或多个点\\.+:匹配任意位置连续的1个或多个点
stringr 包实现(更易读)
如果你常用 tidyverse 生态,用 stringr 包的链式写法更直观:
library(stringr) result <- str_vec |> str_remove_all("^\\.+|\\.+$") |> str_replace_all("\\.+", "_")
输出结果
运行后得到的结果完全符合要求:
[1] "A_B_c_A_D" "A_S_E_Q_AW" "B_C_a_R_Ds"
内容的提问来源于stack exchange,提问作者JorgeHB
相关产品推荐
相关产品推荐

