24

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

例如:

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

我已经阅读了其他几个相关的正则表达式 SO 问题,但恐怕我无法对此做出正面或反面。感谢您的任何帮助。

4

5 回答 5

21

strsplit如果您曾经regexpr获得第一个匹配项,那么您可以获得相同的列表类型结果,然后是regmatches.

x <- "12)34)56"
regmatches(x, regexpr(")", x), invert = TRUE)
# [[1]]
# [1] "12"    "34)56"
于 2014-10-08T00:35:31.903 回答
11

需要速度吗?然后去stringi功能。请参阅此处的时间安排。

library(stringi)
x <- "12)34)56"
stri_split_fixed(str = x, pattern = ")", n = 2)
于 2014-10-07T22:16:55.327 回答
6

识别字符的位置然后在它的任一侧子串可能会更安全:

x <- "12)34)56"
spl <- regexpr(")",x)
substring(x,c(1,spl+1),c(spl-1,nchar(x)))
#[1] "12"    "34)56"
于 2014-10-08T00:21:43.623 回答
4

另一种选择是str_split在包中使用stringr

library(stringr)
f <- function(string)
{
  unlist(str_split(string,"\\)",n=2))
}
> f("12)34)56")
[1] "12"    "34)56"
于 2014-10-07T22:14:14.800 回答
3

将第一个替换(为非打印字符"\01",然后对其进行 strsplit。"\01"只要不出现,您可以使用任何您喜欢的角色代替。

strsplit(sub(")", "\01", "12)34)56"), "\01")
于 2014-10-07T22:12:21.777 回答