使用正则表达式在方括号之前收集所有元素

时间:2016-09-05 02:35:42

标签: regex r

我的数据集中的列有以下结构:

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] ."

2 个答案:

答案 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+\\],? \\.?