Как посчитать количество подчеркиваний и разбить строку только на среднюю?

Вы пытаетесь отправить данные www-form-urlencoded в конечную точку, ожидающую JSON.

Кроме того, ваш код работает нормально.

1
задан IceCreamToucan 18 January 2019 в 20:41
поделиться

3 ответа

Это предполагает нечетное количество подчеркиваний и 99 или меньше.

library(stringr)
library(strex)
strings <- c('aa_bb_cc_dd_ee_ff', 'cc_hh_ff_zz', 'bb_dd')

splitMiddleUnderscore <- function(x){
    nUnderscore <- str_count(x, '_')
    middleUnderscore <- match(nUnderscore, seq(1, 99, 2))
    str1 <- str_before_nth(x, '_',  middleUnderscore)
    str2 <- str_after_nth(x, '_', middleUnderscore)
    c(str1, str2)
}

lapply(strings, splitMiddleUnderscore)

#[[1]]
#[1] "aa_bb_cc" "dd_ee_ff"

#[[2]]
#[1] "cc_hh" "ff_zz"

#[[3]]
#[1] "bb" "dd"
0
ответ дан Bill O'Brien 18 January 2019 в 20:41
поделиться

Вот простое решение, которое предполагает, что всегда есть нечетное количество подчеркиваний.

# Load libraries
library(stringr)

# Define function
even_split <- function(s){
  # Split string
  tmp <- str_split(s, "_")

  lapply(tmp, function(x){
    # Patch string back together in two pieces
    c(paste(x[1:(length(x)/2)], collapse = "_"),
      paste(x[(1+length(x)/2):length(x)], collapse = "_"))
  })
}

# Example
strings <- c('aa_bb_cc_dd_ee_ff', 'cc_hh_ff_zz', 'bb_dd')

# Test function
even_split(strings)
#> [[1]]
#> [1] "aa_bb_cc" "dd_ee_ff"
#> 
#> [[2]]
#> [1] "cc_hh" "ff_zz"
#> 
#> [[3]]
#> [1] "bb" "dd"

Создано в 2019-01-18 с помощью пакета представитель (v0.2.1)

0
ответ дан Lyngbakr 18 January 2019 в 20:41
поделиться

Адаптируя ответ nhahtdh здесь здесь , все, что вам нужно сделать, это добавить шаг для подсчета подчеркивания (выполнено здесь с помощью str_count) и вернуть среднее значение подчеркивания.

library(stringr)

strsplit(
  strings, 
  paste0("^[^_]*(?:_[^_]*){", str_count(strings, '_') %/% 2, "}\\K_"), 
  perl = TRUE)

# [[1]]
# [1] "aa_bb_cc" "dd_ee_ff"
# 
# [[2]]
# [1] "cc_hh" "ff_zz"
# 
# [[3]]
# [1] "bb" "dd"
0
ответ дан IceCreamToucan 18 January 2019 в 20:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: