Regex R";吃;弦的一部分

Regex R";吃;弦的一部分,regex,r,string-split,stringi,Regex,R,String Split,Stringi,我想把一个字符串分成两组。字符串的结构非常简单,但我一直无法使其工作 txt <- "text12-01-2016" 但当我尝试R时,它失败了: strsplit(a[1],split = "([a-zA-Z]*)([0-9]*)") [[1]] [1] "" " " "" "." " " "" " " "" "-" "" "-" "" 如果我引入双方括号,那么它“吃掉”了第一组的最后一个字符,以及第二组的第一个字符: strsplit(txt,split = "([[a

我想把一个字符串分成两组。字符串的结构非常简单,但我一直无法使其工作

txt <- "text12-01-2016"
但当我尝试R时,它失败了:

strsplit(a[1],split = "([a-zA-Z]*)([0-9]*)")
[[1]]
 [1] ""  " " ""  "." " " ""  " " ""  "-" ""  "-" "" 
如果我引入双方括号,那么它“吃掉”了第一组的最后一个字符,以及第二组的第一个字符:

strsplit(txt,split = "([[a-zA-Z]]*)([[0-9]]*)")
[[1]]
[1] "tex"      "2-01-2016"
无论我是否使用
perl=TRUE
。如果我使用
stringi::stri_split
,结果也是一致的,所以这在我的正则表达式中是个问题

在这种情况下,正确的正则表达式是什么?

这里的“问题”是您有一个用于匹配的正则表达式,而不是用于拆分的正则表达式

您可以将与strsplit一起使用:

strsplit(txt,split = "(?<=[a-zA-Z])(?=[0-9])", perl=T)
[[1]]
[1] "text"       "12-01-2016"
strsplit(txt,split = "(?<=[a-zA-Z])(?=[0-9])", perl=T)
[[1]]
[1] "text"       "12-01-2016"
> library(stringr)
>str_match(txt,  "([a-zA-Z]*)([0-9].*)")
     [,1]             [,2]   [,3]        
[1,] "text12-01-2016" "text" "12-01-2016"