如何在字符串的大写字母之前添加下划线(_),但第一个除外?
[1] "VarLengthMean" "VarWidthMean"
我希望它成为:
[1] "Var_Length_Mean" "Var_Width_Mean"
我考虑过使用str_replace_all
中的stringr
,但是我不知道应该使用哪个正则表达式。
我该如何解决这个问题?
答案 0 :(得分:5)
一种选择是捕获小写字母和随后的大写字母,然后在添加捕获组的反向引用(_
,\\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")
答案 1 :(得分:1)
如果您的语言支持断言,这就是您所需要的
找到(?<=[a-z])(?=[A-Z])
替换_
答案 2 :(得分:0)
或者:
str_replace_all(v, "\\B([A-Z]+)", "_\\1")