【发布时间】:2014-10-07 22:08:53
【问题描述】:
我想写一个strsplit命令,抓取第一个“)”并分割字符串。
例如:
f("12)34)56")
"12" "34)56"
我已经阅读了其他几个相关的正则表达式 SO 问题,但恐怕我无法对此做出正面或反面。感谢您的帮助。
【问题讨论】:
我想写一个strsplit命令,抓取第一个“)”并分割字符串。
例如:
f("12)34)56")
"12" "34)56"
我已经阅读了其他几个相关的正则表达式 SO 问题,但恐怕我无法对此做出正面或反面。感谢您的帮助。
【问题讨论】:
如果您使用regexpr 获得第一个匹配项,然后使用regmatches 的反转结果,您可以获得与strsplit 相同的列表类型结果。
x <- "12)34)56"
regmatches(x, regexpr(")", x), invert = TRUE)
# [[1]]
# [1] "12" "34)56"
【讨论】:
需要速度吗?然后去stringi函数。参见时间,例如here.
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"), ",")。