strsplit一审

时间:2014-10-07 22:08:53

标签: regex r strsplit

我想编写一个strsplit命令来抓取第一个“)”并拆分字符串。

例如:

f("12)34)56")
"12" "34)56"

我已经阅读了其他几个相关的正则表达式SO问题,但我担心我无法做出这样的正面或反面。谢谢你的帮助。

5 个答案:

答案 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")