我想编写一个strsplit命令来抓取第一个“)”并拆分字符串。
例如:
f("12)34)56")
"12" "34)56"
我已经阅读了其他几个相关的正则表达式SO问题,但我担心我无法做出这样的正面或反面。谢谢你的帮助。
答案 0 :(得分:15)
如果您使用strsplit
获取第一个匹配项,然后使用regexpr
的反转结果,则可以获得与regmatches
相同的列表类型结果。
x <- "12)34)56"
regmatches(x, regexpr(")", x), invert = TRUE)
# [[1]]
# [1] "12" "34)56"
答案 1 :(得分:7)
需要速度?然后转到stringi
个函数。查看时间,例如here
library(stringi)
x <- "12)34)56"
stri_split_fixed(str = x, pattern = ")", n = 2)
答案 2 :(得分:6)
识别字符的位置然后在字符串的任何一侧子字符串可能更安全:
x <- "12)34)56"
spl <- regexpr(")",x)
substring(x,c(1,spl+1),c(spl-1,nchar(x)))
#[1] "12" "34)56"
答案 3 :(得分:3)
另一种选择是在str_split
包中使用stringr
:
library(stringr)
f <- function(string)
{
unlist(str_split(string,"\\)",n=2))
}
> f("12)34)56")
[1] "12" "34)56"
答案 4 :(得分:2)
将第一个(
替换为非打印字符"\01"
,然后将其替换为strsplit。只要不显示,您就可以使用您喜欢的任何字符代替"\01"
。
strsplit(sub(")", "\01", "12)34)56"), "\01")