在R中,我想转换
c("ThisText", "NextText")
到
c("this.text", "next.text")
这与this SO question相反,与this one相反,但在R中使用点而不是PHP中的下划线。
答案 0 :(得分:11)
不清楚整套规则是什么,但我们假设
为此,我们可以使用sub
和gsub
的perl正则表达式:
# test data
camelCase <- c("ThisText", "NextText", "DON'T_CHANGE")
s <- gsub("([a-z])([A-Z])", "\\1.\\L\\2", camelCase, perl = TRUE)
sub("^(.[a-z])", "\\L\\1", s, perl = TRUE) # make 1st char lower case
,并提供:
[1] "this.text" "next.text" "DON'T_CHANGE"
答案 1 :(得分:7)
您也可以通过snakecase
包执行此操作:
install.packages("snakecase")
library(snakecase)
to_snake_case(c("ThisText", "NextText"), sep_out = ".")
# [1] "this.text" "next.text"
Github链接到包:https://github.com/Tazinho/snakecase
答案 2 :(得分:3)
您可以将所有大写字母替换为自己,将前一个点替换为gsub
,将所有tolower
和substr
更改为初始点:
x <- c("ThisText", "NextText", "LongerCamelCaseText")
substr(tolower(gsub("([A-Z])","\\.\\1",x)),2,.Machine$integer.max)
[1] "this.text" "next.text" "longer.camel.case.text"