Domanda

C'è un modo per dividere le stringhe della custodia a cammello in R?

Ho tentato:

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

Soluzione

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" 

Guardando Ramnath e il mio posso dire che la mia impressione iniziale che si trattasse di una domanda sottospetificata è stata supportata.

E dai tommy e Ramanth upvotes per aver sottolineato [:upper:]

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

Altri suggerimenti

Ecco un modo per farlo

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"

Ecco un approccio che utilizza un singolo regex (un lookahead e lookbehind):

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

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

Ecco un liner che utilizza il gsubfn pacchi strapply. L'espressione regolare corrisponde all'inizio della stringa (^) seguito da una o più lettere minuscole ([[:lower:]]+) o (|) una lettera maiuscola ([[:upper:]]) seguito da zero o più lettere minuscole ([[:lower:]]*) e elabora le stringhe abbinate con c (che concatena le singole corrispondenze in un vettore). Come con strsplit Restituisce un elenco in modo che prendiamo il primo componente ([[1]]) :

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

L'inizio di una risposta è dividere tutti i personaggi:

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

Quindi trova quali posizioni di stringa sono maiuscole:

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

Quindi usalo per dividere ogni serie di caratteri. . .

Penso che la mia altra risposta sia migliore del follwing, ma se è necessario solo un oneliner a dividere ... eccoli:

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

Qui una soluzione facile tramite SnakeCase + alcuni aiutanti ordinari:

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" 

GitubLink a SnakeCase: https://github.com/tazinho/snakecase

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top