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

时间:2019-05-14 13:06:39

标签: r regex regex-lookarounds regex-group

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

[1] "VarLengthMean" "VarWidthMean" 

我希望它成为:

[1] "Var_Length_Mean" "Var_Width_Mean" 

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

我该如何解决这个问题?

3 个答案:

答案 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")