R: strsplit в первом экземпляре
Я хотел бы написать команду strsplit, которая захватывает первый ")" и разбивает строку.
Например:
f("12)34)56")
"12" "34)56"
Я прочитал несколько других связанных с этим вопросов регулярных выражений, но я боюсь, что я не могу сделать головы или хвосты этого. Благодарим вас за помощь.
Ответы
Ответ 1
Вы можете получить тот же результат типа списка, что и с strsplit
, если вы использовали regexpr
, чтобы получить первое совпадение, а затем инвертированный результат regmatches
.
x <- "12)34)56"
regmatches(x, regexpr(")", x), invert = TRUE)
# [[1]]
# [1] "12" "34)56"
Ответ 2
Возможно, было бы безопаснее определить, где находится символ, а затем подстроить его с обеих сторон:
x <- "12)34)56"
spl <- regexpr(")",x)
substring(x,c(1,spl+1),c(spl-1,nchar(x)))
#[1] "12" "34)56"
Ответ 3
Нужна скорость? Затем перейдите к функциям stringi
. См. Тайминги, например. здесь.
library(stringi)
x <- "12)34)56"
stri_split_fixed(str = x, pattern = ")", n = 2)
Ответ 4
Замените первый (
на непечатный символ "\01"
, а затем strsplit на этом. Вы можете использовать любой символ, который вам нравится, вместо "\01"
, если он не отображается.
strsplit(sub(")", "\01", "12)34)56"), "\01")
Ответ 5
Другой вариант - использовать str_split
в пакете stringr
:
library(stringr)
f <- function(string)
{
unlist(str_split(string,"\\)",n=2))
}
> f("12)34)56")
[1] "12" "34)56"