在第一个实例上使用strsplit

25

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

例如:

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

我已经阅读了几个相关的正则表达式问题,但我不知道如何着手解决。感谢任何帮助。

5个回答

23

如果你使用regexpr来获取第一个匹配项,然后使用regmatches的反转结果,你可以获得与strsplit相同的列表类型结果。

x <- "12)34)56"
regmatches(x, regexpr(")", x), invert = TRUE)
# [[1]]
# [1] "12"    "34)56"

13

需要速度吗?那就选择 stringi 函数。查看时间例如 这里

library(stringi)
x <- "12)34)56"
stri_split_fixed(str = x, pattern = ")", n = 2)

7
这样做可能更安全,先确定字符的位置,然后在它的两侧进行子字符串截取:
x <- "12)34)56"
spl <- regexpr(")",x)
substring(x,c(1,spl+1),c(spl-1,nchar(x)))
#[1] "12"    "34)56"

6

另一个选项是使用stringr包中的str_split函数:

library(stringr)
f <- function(string)
{
  unlist(str_split(string,"\\)",n=2))
}
> f("12)34)56")
[1] "12"    "34)56"

4

将第一个(替换为不可打印字符"\01",然后在该字符上进行strsplit操作。您可以使用任何字符代替"\01",只要它不出现即可。

strsplit(sub(")", "\01", "12)34)56"), "\01")

谢谢您的建议,但这样做很危险,因为通常在 ) 前面可能会有逗号,例如 strsplit(sub(")", ",", ",12)34)56"), ",") - Francis Smart

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接