我应该如何使用strsplit拆分和保留元素?

时间:2012-06-13 11:11:23

标签: r strsplit

R中的strsplit函数是什么,匹配并删除给定的正则表达式,将字符串的其余部分拆分为向量。

>strsplit("abc123def", "[0-9]+")
[[1]]
[1] "abc" ""    ""    "def" 

但是我应该如何使用正则表达式以相同的方式拆分字符串,还要保留匹配?我需要以下内容。

>FUNCTION("abc123def", "[0-9]+")
[[1]]
[1] "abc" "123" "def" 

使用strapply(“abc123def”,“[0-9] + | [az] +”)可以在这里工作,但如果正则表达式无法捕获除匹配以外的其余字符串会怎么样?

3 个答案:

答案 0 :(得分:24)

从根本上说,在我看来,你想要的不是在[0-9]+上拆分,而是在[0-9]+和其他一切之间进行分割。在您的字符串中,该转换不是预先存在的。要插入它,您可以使用gsub进行预处理并反向引用:

test <- "abc123def"
strsplit( gsub("([0-9]+)","~\\1~",test), "~" )

[[1]]
[1] "abc" "123" "def"

答案 1 :(得分:7)

您可以使用外观断言。

> test <- "abc123def"
> strsplit(test, "(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)", perl=T)
[[1]]
[1] "abc" "123" "def"

答案 2 :(得分:2)

您可以使用gsubfn包中的strapply。

test <- "abc123def"
strapply(X=test,
         pattern="([^[:digit:]]*)(\\d+)(.+)",
         FUN=c,
         simplify=FALSE)

[[1]]
[1] "abc" "123" "def"