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

jac*_*son 18 r strsplit

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

>strsplit("abc123def", "[0-9]+")
[[1]]
[1] "abc" ""    ""    "def" 
Run Code Online (Sandbox Code Playgroud)

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

>FUNCTION("abc123def", "[0-9]+")
[[1]]
[1] "abc" "123" "def" 
Run Code Online (Sandbox Code Playgroud)

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

Ari*_*man 24

从根本上说,在我看来,你想要的不是分裂,[0-9]+而是分裂[0-9]+其他事物之间的过渡.在您的字符串中,该转换不是预先存在的.要插入它,您可以预处理gsub和反向引用:

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

[[1]]
[1] "abc" "123" "def"
Run Code Online (Sandbox Code Playgroud)


Avi*_*Raj 7

您可以使用外观断言.

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

  • 为什么选择downvote?它非常适合这种输入. (6认同)