我有一个如下所示的字符串:
x <- "01(01)121210(01)0001"
我想将其拆分为一个向量,以便得到以下结果:
[1] "0" "1" "(01)" "1" "2" "1" "2" "1" "0" "(01)" "0" "0" "0" "1"
(|) 可以是 [|] 或 {|},括号之间的位数可以是 2 位或更多。
我一直试图通过首先在括号上分开来做到这一点:
unlist(strsplit(x, "(?<=[\\]\\)\\}])", perl=T))
[1] "01(01)" "121210(01)" "0001"
or unlist(strsplit(x, "(?<=[\\[\\(\\{])", perl=T))
[1] "01(" "01)121210(" "01)0001"
但我找不到将两者结合在一起的方法。
然后,我希望拆分不包含括号的元素。
如果有人可以帮助我解决这个问题或知道一种更优雅的方法来做到这一点,我将不胜感激。
非常感谢!
最佳答案
这是另一种方式:
unlist(strsplit(x, '\\([^)]*\\)(*SKIP)(*F)|(?=)', perl=T))
# [1] "0" "1" "(01)" "1" "2" "1" "2" "1" "0" "(01)" "0" "0" "0" "1"
\\([^)]*\\)
匹配括号中的任何内容,并且 (*SKIP)(*F)
告诉正则表达式引擎在此模式上失败,如果它在字符串中找到该模式,则不要使用 |
另一侧的替代模式重新测试该部分字符串。 |
另一侧的模式是 (?=)
,它匹配字符之间的空格。关于regex - R strsplit之前(和之后)保留两个分隔符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25160197/