Return 两个字符 '.' 之间的字符串

Return a string between two characters '.'

我有类似于以下的列名

names(df_woe)

# [1] "A_FLAG" "woe.ABCD.binned" "woe.EFGHIJ.binned"       
 ...

我想通过删除 "woe." 和“.binned”部分来重命名列,以便返回以下内容

names(df_woe)
# [1] "A_FLAG" "ABCD" "EFGHIJ"       
 ...

我试过 substr(names(df_woe), start, stop) 但我不确定如何设置变量 start/stop 参数。

nam <- c("A_FLAG", "woe.ABCD.binned", "woe.EFGH.binned")
gsub("woe\.|\.binned", "", nam)
[1] "A_FLAG" "ABCD"   "EFGH"  

编辑:处理更复杂情况的解决方案,例如 woe..binned.binned

gsub("^woe\.|\.binned$", "", nam)

另一个解决方案,使用 stringr 包:

 str_replace_all("woe.ABCD.binned", pattern = "woe.|.binned", replacement = "")
 # [1] "ABCD"

另一个可能且可读的正则表达式可以是创建组和 return 在第一个点之后和第二个点之前的组,即

gsub("(.*\.)(.*)\..+", "\2", names(df_woe))
#[1] "A_FLAG" "ABCD"   "EFGH"