用于在大写字母前添加下划线的正则表达式

RegEx for adding underscore before capitalized letters

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

[1] "VarLengthMean" "VarWidthMean" 

我希望它变成:

[1] "Var_Length_Mean" "Var_Width_Mean" 

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

如何解决这个问题?

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

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

如果实例较多,使用gsub

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

数据

v1 <- c("VarLength", "VarWidth" )
v2 <- c("VarLengthMean", "VarWidthMean")

或者:

str_replace_all(v, "\B([A-Z]+)", "_\1")

如果您的语言支持断言,这就是您所需要的

找到(?<=[a-z])(?=[A-Z])
替换 _