我想编写一个strsplit命令,它可以获取第一个“)”并拆分字符串。
例如:
f("12)34)56")
"12" "34)56"
我已经阅读了几个相关的正则表达式问题,但我不知道如何着手解决。感谢任何帮助。
如果你使用regexpr
来获取第一个匹配项,然后使用regmatches
的反转结果,你可以获得与strsplit
相同的列表类型结果。
x <- "12)34)56"
regmatches(x, regexpr(")", x), invert = TRUE)
# [[1]]
# [1] "12" "34)56"
需要速度吗?那就选择 stringi
函数。查看时间例如 这里。
library(stringi)
x <- "12)34)56"
stri_split_fixed(str = x, pattern = ")", n = 2)
x <- "12)34)56"
spl <- regexpr(")",x)
substring(x,c(1,spl+1),c(spl-1,nchar(x)))
#[1] "12" "34)56"
另一个选项是使用stringr
包中的str_split
函数:
library(stringr)
f <- function(string)
{
unlist(str_split(string,"\\)",n=2))
}
> f("12)34)56")
[1] "12" "34)56"
将第一个(
替换为不可打印字符"\01"
,然后在该字符上进行strsplit操作。您可以使用任何字符代替"\01"
,只要它不出现即可。
strsplit(sub(")", "\01", "12)34)56"), "\01")
)
前面可能会有逗号,例如strsplit(sub(")", ",", ",12)34)56"), ",")
。 - Francis Smart