RegEx用于在大写字母之前添加下划线

Hae*_*zer 3 regex r regex-group regex-lookarounds

如何在字符串的大写字母之前添加下划线(_),但第一个字母除外?

[1] "VarLengthMean" "VarWidthMean" 
Run Code Online (Sandbox Code Playgroud)

我希望它成为:

[1] "Var_Length_Mean" "Var_Width_Mean" 
Run Code Online (Sandbox Code Playgroud)

我考虑过使用str_replace_allfrom stringr,但是我不知道应该使用哪个正则表达式。

我该如何解决这个问题?

akr*_*run 5

一种选择是捕捉到小写字母和下面的大写字母,然后插入_,同时添加反向引用(\\1\\2所捕获的组)

sub("([a-z])([A-Z])", "\\1_\\2", v1)
#[1] "Var_Length" "Var_Width"
Run Code Online (Sandbox Code Playgroud)

如果还有更多实例,请使用 gsub

gsub("(?<=[a-z])(?=[A-Z])", "_", v2,  perl = TRUE)
#[1] "Var_Length_Mean" "Var_Width_Mean" 
Run Code Online (Sandbox Code Playgroud)

数据

v1 <- c("VarLength", "VarWidth" )
v2 <- c("VarLengthMean", "VarWidthMean")
Run Code Online (Sandbox Code Playgroud)