有没有办法在R中分割驼峰大小写字符串?
我试过了:
string.to.split = "thisIsSomeCamelCase"
unlist(strsplit(string.to.split, split="[A-Z]") )
# [1] "this" "s" "ome" "amel" "ase"
答案 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)
以下是使用gsubfn
包strapply
的单行内容。正则表达式匹配字符串的开头(^
),后跟一个或多个小写字母([[: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