【问题标题】:How to convert CamelCase to not.camel.case in R如何在 R 中将 CamelCase 转换为 not.camel.case
【发布时间】:2014-03-20 09:30:08
【问题描述】:

在 R 中,我想转换

c("ThisText", "NextText")

c("this.text", "next.text")

这是 this SO question 的反面,与 this one 相同,但在 R 中使用点而不是 PHP 中的下划线。

【问题讨论】:

标签: r


【解决方案1】:

不清楚整套规则是什么,但我们假设

  • 我们应该在小写字符之后将任何大写字符小写,并在它们之间插入一个点,并且
  • 如果后面是小写字符,则字符串的第一个字符小写。

为此,我们可以使用带有subgsub 的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"

【讨论】:

    【解决方案2】:

    您也可以通过 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

    【讨论】:

      【解决方案3】:

      您可以将所有大写字母替换为自己,将前面的点替换为gsub,将所有tolowersubstr 替换为初始点:

      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"
      

      【讨论】:

      • 不幸的是,这对于 Gabor 的解决方案处理的 DON'T_CHANGE 输入失败。但它确实处理了 OP 请求的解决方案空间。
      猜你喜欢
      • 2012-07-25
      • 2011-05-08
      • 1970-01-01
      • 2010-12-08
      • 1970-01-01
      • 2011-06-03
      • 2012-03-06
      • 2019-01-01
      • 2017-11-28
      相关资源
      最近更新 更多