r语言 - 分割包含非空格连字符的字符串



我有如下字符串:

2 - 5-< 2
6 - 10-< 2
6 - 10-2 - 5
> 15-2 - 5

我想分割那些字符串,在-之前和之后都没有空格的地方。因此,上面的字符串将被分割如下:

"2 - 5" "< 2"
"6 - 10" "< 2"
"6 - 10" "2 - 5"
"> 15" "2 - 5"

在R Studio中,我尝试使用sub()和strsplit(),但我发现很难设置正确的正则表达式。有人知道吗?

使用perl=TRUE与lookaround:

vec <- c("2 - 5-< 2", "6 - 10-< 2", "6 - 10-2 - 5", "> 15-2 - 5")
strsplit(vec, "(?<! )-(?!= )", perl=TRUE)
# [[1]]
# [1] "2 - 5" "< 2"  
# [[2]]
# [1] "6 - 10" "< 2"   
# [[3]]
# [1] "6 - 10" "2 - 5" 
# [[4]]
# [1] "> 15"  "2 - 5"

我想这是一个更容易理解的解决方案:

library(stringr)
str_split(vec, "(?<=\d)-(?=\d)")
[[1]]
[1] "2 - 5" "< 2"  
[[2]]
[1] "6 - 10" "< 2"   
[[3]]
[1] "6 - 10" "2 - 5" 
[[4]]
[1] "> 15"  "2 - 5"

首先,不需要perl = TRUE(好吧,但是一个新的包,stringr)。(?<=\d)(?=\d)环顾四周,这本身就更容易处理。第一个意思是:如果你在左边看到一个数字…;第二个说,如果你在右边看到一个数字…str_split(带下划线)表示,如果满足这两个条件,则在破折号-上进行分割。

最新更新