在R中拆分CamelCase

时间:2011-12-06 21:18:04

标签: r split camelcasing

有没有办法在R中分割驼峰大小写字符串?

我试过了:

string.to.split = "thisIsSomeCamelCase"
unlist(strsplit(string.to.split, split="[A-Z]") )
# [1] "this" "s"    "ome"  "amel" "ase" 

7 个答案:

答案 0 :(得分:12)

string.to.split = "thisIsSomeCamelCase"
gsub("([A-Z])", " \\1", string.to.split)
# [1] "this Is Some Camel Case"

strsplit(gsub("([A-Z])", " \\1", string.to.split), " ")
# [[1]]
# [1] "this"  "Is"    "Some"  "Camel" "Case" 

看着拉姆纳特和我的,我可以说我最初的印象是这是一个未说明的问题已得到支持。

并指出Tommy和Ramanth赞成指出[:upper:]

strsplit(gsub("([[:upper:]])", " \\1", string.to.split), " ")
# [[1]]
# [1] "this"  "Is"    "Some"  "Camel" "Case" 

答案 1 :(得分:11)

这是一种方法

split_camelcase <- function(...){
  strings <- unlist(list(...))
  strings <- gsub("^[^[:alnum:]]+|[^[:alnum:]]+$", "", strings)
  strings <- gsub("(?!^)(?=[[:upper:]])", " ", strings, perl = TRUE)
  return(strsplit(tolower(strings), " ")[[1]])
}

split_camelcase("thisIsSomeGood")
# [1] "this" "is"   "some" "good"

答案 2 :(得分:5)

这是使用单个正则表达式(Lookahead和Lookbehind)的方法:

strsplit(string.to.split, "(?<=[a-z])(?=[A-Z])", perl = TRUE)

## [[1]]
## [1] "this"  "Is"    "Some"  "Camel" "Case" 

答案 3 :(得分:2)

以下是使用gsubfnstrapply的单行内容。正则表达式匹配字符串的开头(^),后跟一个或多个小写字母([[:lower:]]+)或(|)大写字母([[:upper:]])后跟零个或多个小写字母([[:lower:]]*),并使用c处理匹配的字符串(将各个匹配连接到一个向量中)。与strsplit一样,它返回一个列表,因此我们采用第一个组件([[1]]):

library(gsubfn)
strapply(string.to.split, "^[[:lower:]]+|[[:upper:]][[:lower:]]*", c)[[1]]
## [1] "this"  "Is"    "Camel" "Case" 

答案 4 :(得分:0)

答案的开头是拆分所有字符:

sp.x <- strsplit(string.to.split, "")

然后找出哪些字符串位置是大写:

ind.x <- lapply(sp.x, function(x) which(!tolower(x) == x))

然后用它来分割出每一个字符。 。 。

答案 5 :(得分:0)

我认为我的另一个答案比下面的要好,但是如果只需要一个oneliner来分开......我们走了:

library(snakecase)
unlist(strsplit(to_parsed_case(string.to.split), "_"))
#> [1] "this"  "Is"    "Some"  "Camel" "Case" 

答案 6 :(得分:-1)

这是一个简单的解决方案,通过snakecase +一些tidyverse助手:

install.packages("snakecase")
library(snakecase)
library(magrittr)
library(stringr)
library(purrr)

string.to.split = "thisIsSomeCamelCase"
to_parsed_case(string.to.split) %>% 
  str_split(pattern = "_") %>% 
  purrr::flatten_chr()
#> [1] "this"  "Is"    "Some"  "Camel" "Case" 

githublink to snakecase:communicate doc