拆分具有 not-space 连字符的字符串
Splitting a string that has a not-space hyphen
我有如下字符串:
2 - 5-< 2
6 - 10-< 2
6 - 10-2 - 5
> 15-2 - 5
我想在 - 之前和之后都没有空格的地方拆分这些字符串 space。因此,上面的字符串将按如下方式拆分:
"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)
是 positive 环视,本质上更容易处理。第一个意思是:如果你在左边看到一个数字......;第二个说,如果你在右边看到一个数字...... str_split
(带下划线)说,如果满足这两个条件,那么在破折号 -
.[=17= 上拆分]
我有如下字符串:
2 - 5-< 2
6 - 10-< 2
6 - 10-2 - 5
> 15-2 - 5
我想在 - 之前和之后都没有空格的地方拆分这些字符串 space。因此,上面的字符串将按如下方式拆分:
"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)
是 positive 环视,本质上更容易处理。第一个意思是:如果你在左边看到一个数字......;第二个说,如果你在右边看到一个数字...... str_split
(带下划线)说,如果满足这两个条件,那么在破折号 -
.[=17= 上拆分]