【发布时间】:2014-03-20 09:30:08
【问题描述】:
在 R 中,我想转换
c("ThisText", "NextText")
到
c("this.text", "next.text")
这是 this SO question 的反面,与 this one 相同,但在 R 中使用点而不是 PHP 中的下划线。
【问题讨论】:
标签: r
在 R 中,我想转换
c("ThisText", "NextText")
到
c("this.text", "next.text")
这是 this SO question 的反面,与 this one 相同,但在 R 中使用点而不是 PHP 中的下划线。
【问题讨论】:
标签: r
不清楚整套规则是什么,但我们假设
为此,我们可以使用带有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"
【讨论】:
您也可以通过 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
【讨论】:
您可以将所有大写字母替换为自己,将前面的点替换为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"
【讨论】:
DON'T_CHANGE 输入失败。但它确实处理了 OP 请求的解决方案空间。