【发布时间】:2012-01-14 11:19:35
【问题描述】:
有没有办法在 R 中拆分驼峰式字符串?
我已经尝试过:
string.to.split = "thisIsSomeCamelCase"
unlist(strsplit(string.to.split, split="[A-Z]") )
# [1] "this" "s" "ome" "amel" "ase"
【问题讨论】:
标签: r split camelcasing
有没有办法在 R 中拆分驼峰式字符串?
我已经尝试过:
string.to.split = "thisIsSomeCamelCase"
unlist(strsplit(string.to.split, split="[A-Z]") )
# [1] "this" "s" "ome" "amel" "ase"
【问题讨论】:
标签: r split camelcasing
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"
看看 Ramnath 和我的问题,我可以说我最初的印象是,这是一个未充分说明的问题。
并为 Tommy 和 Ramanth 点赞[:upper:]
strsplit(gsub("([[:upper:]])", " \\1", string.to.split), " ")
# [[1]]
# [1] "this" "Is" "Some" "Camel" "Case"
【讨论】:
?regex 并找到小写字符的正确模式,并为任意数量的小写字符使用正确的符号。
这是一种方法
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"
【讨论】:
"enÖIHavet"
这是一种使用单个正则表达式(前瞻和后瞻)的方法:
strsplit(string.to.split, "(?<=[a-z])(?=[A-Z])", perl = TRUE)
## [[1]]
## [1] "this" "Is" "Some" "Camel" "Case"
【讨论】:
strsplit(string.to.split, "(?<=[[:lower:]])(?=[[:upper:]])", perl = TRUE)
这是一个使用gsubfn 包的strapply 的单行代码。正则表达式匹配字符串的开头 (^) 后跟一个或多个小写字母 ([[:lower:]]+) 或 (|) 一个大写字母 ([[:upper:]]) 后跟零个或多个小写字母([[:lower:]]*) 并使用c 处理匹配的字符串(它将单个匹配项连接成一个向量)。与strsplit 一样,它返回一个列表,因此我们采用第一个组件([[1]]):
library(gsubfn)
strapply(string.to.split, "^[[:lower:]]+|[[:upper:]][[:lower:]]*", c)[[1]]
## [1] "this" "Is" "Camel" "Case"
【讨论】:
我认为我的其他答案比下面的要好,但如果只需要一个单线来拆分......我们开始吧:
library(snakecase)
unlist(strsplit(to_parsed_case(string.to.split), "_"))
#> [1] "this" "Is" "Some" "Camel" "Case"
【讨论】:
答案的开头是拆分所有字符:
sp.x <- strsplit(string.to.split, "")
然后找出哪些字符串位置是大写的:
ind.x <- lapply(sp.x, function(x) which(!tolower(x) == x))
然后使用它来拆分每个字符运行。 . .
【讨论】:
这是一个简单的解决方案,通过蛇盒 + 一些 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"
蛇盒的 Github 链接:https://github.com/Tazinho/snakecase
【讨论】: