Pav*_*ive 2 regex r string-split stringi
我想将一个字符串分成两组.字符串的结构非常简单,但我无法使其工作.
txt <- "text12-01-2016"
Run Code Online (Sandbox Code Playgroud)
它总是一些字母,后跟一个日期和日期,显然是以数字开头.我在https://regex101.com/尝试了以下正则表达式,并有效地将字符串正确分开:
([a-zA-Z]*)([0-9].*)
1. "text"
2. "12-01-2016"
Run Code Online (Sandbox Code Playgroud)
但是当我在R中尝试它失败时:
strsplit(a[1],split = "([a-zA-Z]*)([0-9]*)")
[[1]]
[1] "" " " "" "." " " "" " " "" "-" "" "-" ""
Run Code Online (Sandbox Code Playgroud)
如果我引入双方括号,那么它"吃掉"第一组的最后一个字符,第二组的第一个字符:
strsplit(txt,split = "([[a-zA-Z]]*)([[0-9]]*)")
[[1]]
[1] "tex" "2-01-2016"
Run Code Online (Sandbox Code Playgroud)
如果我使用它并不重要perl=TRUE.如果我使用结果也是一致的stringi::stri_split,所以这是我的正则表达式中的一个问题.
在这种情况下使用的正确正则表达式是什么?
这里的"问题"是你有匹配的正则表达式,而不是分裂.
您可以使用下面的正则表达式PCRE有strsplit:
strsplit(txt,split = "(?<=[a-zA-Z])(?=[0-9])", perl=T)
[[1]]
[1] "text" "12-01-2016"
Run Code Online (Sandbox Code Playgroud)
正则表达式将匹配字母和数字之间的位置,strsplit将分割结果.如果需要,您可以进一步取消.
如果您想使用您正则表达式,使用str_match从stringr:
> library(stringr)
>str_match(txt, "([a-zA-Z]*)([0-9].*)")
[,1] [,2] [,3]
[1,] "text12-01-2016" "text" "12-01-2016"
Run Code Online (Sandbox Code Playgroud)