我的数据集中的列有以下结构:
x = c("163[330], 164[331], 165[331], 166[330], 167[328] .")
大小可以有所不同,从一个元素到几百个,我真正感兴趣的是在方括号内的那些数字之前收集所有元素数字。因此,我想要的输出是:
y = c(163, 164, 165, 166, 167)
我尝试使用类似的solution for PHP,但没有用。我如何使用正则表达式实现这一目标?
> strsplit(x,'~\\[.*?\\][^\\]]*\\]~')[[1]]
[1] "163[330], 164[331], 165[331], 166[330], 167[328] ."
答案 0 :(得分:2)
试试这个
as.numeric(matrix(strsplit(x,split = "\\[|]|,")[[1]],byrow = T,ncol = 3)[,1])
#[1] 163 164 165 166 167
答案 1 :(得分:2)
您可以使用str_extract_all
包中的stringr
,这样可以直接使用预览语法?=
和模式\\d+(?=\\[)
来提取{{1}之前的所有数字字符:
[
对于library(stringr)
str_extract_all(x[1], "\\d+(?=\\[)")[[1]]
# [1] "163" "164" "165" "166" "167"
的特定情况,strsplit
也可能是split
:
\\[\\d+\\],? \\.?